日期:2014-05-20  浏览次数:20578 次

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