首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

关于继承和多态的有关问题 帮忙分析下代码

2012-03-02 
关于继承和多态的问题帮忙分析下代码class Parent{public int x 10public void show(){System.out.prin

关于继承和多态的问题 帮忙分析下代码
class Parent{
public int x = 10;
public void show(){
System.out.println("in Parent "+x);
}
public Parent(){
show();
}
}

class Child extends Parent{
public int x = 20;
public void show(){
System.out.println("int Child "+x);
}
}

public class TestConstructorPoly{
public static void main(String[]args){
new Child();
}
}

结果输出是 int Child 0

为什么子类里面的变量取不出来?
谁帮我分析下 谢谢!!

[解决办法]
java类实例初始化顺序是先调用构造方法,然后再初始化实例变量。
也就是说在你调用构造方法时,x=20这个操作还没有执行,此时x仅有一个默认的初始值0,所以,构造方法里面取得的x值是0。如果你在构造方法结束后,在调用show(),就会得到正确值了。
你可以试试这个,你就明白了。

Java code
public class TestConstructorPoly {    public static void main(String[] args) {        new Child().show();    }}
[解决办法]
2楼正解,补充一点,java类实例初始化时,是先初始化实例变量,再执行构造方法,子类继承父类,所以先实例化父类,因为子类覆写了父类同名方法,所以调用是的子类的同名方法,这个时候子类还未初始化,因此x为“0”
,如果是new Parent();则会有值,或者把子类show()方法改名,效果又不一样,楼主可以试一下!

热点排行