java继承问题,成员变量重载

来源:百度知道 编辑:UC知道 时间:2024/07/08 02:11:30
public class A{
int i=1;
public void setI(int i){
this.i=i;
}

public int getI(){
return this.i;
}

}

public class AA extends A{
int i=2;
public void print(){
System.out.println(getI());
}
}

public class Test{
public static void main(String [] a){
AA aa = new AA();
aa.print();
}
}
输出结果是 2,还是1
说明原理

是1
AA类拥有A类的所有方法

答案是1
原因是:子类拥有除父类的private的方法和成员变量。
当子类的对象调用继承父类的方法时,用的是父类的对象;当调用自己的方法时,用的是自己的方法。

把以上代码改下,你会看的更明白:
class A{
int i=1;
public void setI(int i){
this.i=i;
}

public int getI(){
return this.i;
}

}

class AA extends A{
int i=2;
public void print(){
System.out.println(this.i);
System.out.println(super.getI());
System.out.println(getI());
}
}

public class test_test{
public static void main(String [] a){
AA aa = new AA();
aa.print();
}
}

输入结果为:1

在main方法中调用 aa.print();进入class AA中的prin()方法 在print()方法中进入类A类中的getI方法中,在getI方法中使用了 this.i ;this代表当前方法所在的类的对象 相当于A a = new A(); a.i; 所以this.i 就是 1