当前位置: 代码迷 >> Java相关 >> 继承时的困惑解决办法
  详细解决方案

继承时的困惑解决办法

热度:7242   发布时间:2013-02-25 21:45:38.0
继承时的困惑
创建父类和子类对象时,内存如何分配的,请高人给出此时父类和子类的堆栈图。
并解释一下父类和子类的Field是共享的吗,父类Field和子类的互相影响吗。
再看下面程序
public class Base {
int x;
Base()
{
x=5;
}
public void show()
{
System.out.println(x);
}

}




public class Sub extends Base {
Sub()
{
x=9;
}

}



public class Test {
public static void main(String[] args) {
Sub sub =new Sub();
sub.show();
Base base =new Base();
base.show();

请高人细细解答,并且当子类定义一个X时代码又怎么解释啊,最好对比着从堆栈内存角度讲解,希望有图

------解决方案--------------------------------------------------------
Java code
public class Test {    public static void main(String[] args) {        /**         * 首先要明白子类继承父类的所有属性,但private修饰的不可以使用         * 这里是用默认修饰,所以也能使用         * 构造方法执行的顺序是从顶层父类一直向下执行的本类         */                /*         * 这里当创建Sub对象时,会首先执行父类Base的构造方法,这时x被赋值为5,         * 接着执行Sub自己的构造方法,这时x被赋值为9         * (但当在Sub类中定义一个int x;时,赋值会采用就近原则,Sub的构造方法就是给自己类的x赋值,         *  因此调用show方法,输出的x值还是父类给x的值,即5)         */        Sub sub = new Sub();        // 这时sub调用show方法时,x就是9了        sub.show();        //这里创建的是父类的对象,所以只执行父类的构造方法,x被赋值为5        Base base = new Base();        //所以这里输出为5        base.show();    }}class Base{    int x;        public Base(){        x=5;    }    public void show(){        System.out.println(x);    }}class Sub extends Base{    public Sub(){        x = 9;    }}
  相关解决方案