当前位置: 代码迷 >> J2SE >> 关于构造函数的一个有关问题
  详细解决方案

关于构造函数的一个有关问题

热度:57   发布时间:2016-04-23 19:52:57.0
关于构造函数的一个问题
public class Test6 {
public static void main(String[] args) {
new Derived();

}
}

class Base {

private int i = 2;

public Base() {
this.display();
}

public void display() {
System.out.println(i);
}
}

class Derived extends Base {

private int i = 22;

Derived() {
i = 222;
}

public void display() {
System.out.println(i);
}
}
控制台输出的是:0。不懂为什么,不是应该输出2吗
------解决思路----------------------
过程如下:
1.子类初始化,先创建父类对象
public Base() {
 this.display();重点这里了,由于子类覆写了display()函数,这里会跳到子类的display,
 }
子类与父类都是这样实现的display函数
public void display() {
 System.out.println(i);
 }
 }
父类初始化时display跳到了子类,而此时子类还未进行成员变量的初始化,i=0,子类的display()输出0.
2.父类初始化后子类初始化化,包括成员变量,i的改写为22.
------解决思路----------------------
引用:
过程如下:
1.子类初始化,先创建父类对象
public Base() {
 this.display();重点这里了,由于子类覆写了display()函数,这里会跳到子类的display,
 }
子类与父类都是这样实现的display函数
public void display() {
 System.out.println(i);
 }
 }
父类初始化时display跳到了子类,而此时子类还未进行成员变量的初始化,i=0,子类的display()输出0.
2.父类初始化后子类初始化化,包括成员变量,i的改写为22.


那请问重点那行...是因为多态吗?如果是多态..也没有父类引用指向子类对象啊,如果不是..this在debug模式下显示是 Derived为什么?
  相关解决方案