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

关于父类构造器中this的问题
这个题目是我在李刚的《疯狂JAVA突破程序员基本功的16课》的这本书中看到的,有些不明白的地方,求高人指点。
代码:
class Base{
//定义一个私有变量i
private int i=2;
public Base() {
this.display();
}
public void display() {
System.out.println(i);
}
}
class Derived extends Base{
//定义一个实例变量i
private int i=22;
//构造器,将实例变量i初始化为222
public Derived() {
i=222;
}
public void display(){
System.out.println(i);
}
}
public class Test {
public static void main(String[] args) {
//创建Derived的构造器创建实例
new Derived();
}
}
求问输出的结果为什么是0?然后如果将父类也就是Base类的display方法改为私有的,结果为什么变成了2 ?求高手指点。

------解决方案--------------------
this.display();
this是Base类中指向Derived类的对象的一个引用,public时调用display(),会去调用子类中重写的display()方法,否则就调用父类中的display()。private时子类不会继承父类的方法,故调用的是父类的方法。