读书人

java中继承的一点有关问题

发布时间: 2012-03-26 15:46:56 作者: rapoo

java中继承的一点问题
package package1;
public class A {
public int i=1;
public void printI() {
System.out.println("i="+i);
}
}

package package1;

public class B extends A {
public int i=2;
public static void main(String[] args) {
B b=new B();
b.printI();
}

}
结果输出i=1;
十分不解啊

[解决办法]
首先编译以后会有A.class和B.class文件,A的属性i存在于A.class中,B的属性i存在于B.class中,调用b.printI(); 的时候,现在B.class中查找有没有printI方法,结果发现没有,就追源到父类,于是在A.class中找到printI,然后调用该方法,然后该方法的i是A.class的i而不是b.class的i,因为父类本身没法知道子类也会有一个同名的属性,所以输出的就是A.class的i

读书人网 >J2SE开发

热点推荐