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