创建父类和子类对象时,内存如何分配的,请高人给出此时父类和子类的堆栈图。
并解释一下父类和子类的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; }}