java 中子类继承父类的字段时,占用的是同一块内存还是父类和子类对象分别占用各自的一块内存,请高人详答

Python013

java 中子类继承父类的字段时,占用的是同一块内存还是父类和子类对象分别占用各自的一块内存,请高人详答,第1张

java语言中的对象采用的堆和栈的形式来存放,例如 Father f = new Father()f存放在栈中,其实只是一个堆内存的地址,真正地对象保存在此地址所指向的堆内存中。

所以你的答案就显而易见了,Father f = new Father() Child c = new Child()这里Father是父类,Child是子类,f和c是两个不同的内存地址,他们的对象保存的地方也不同,所以他们的字段也不会再同一片内存区域。

如果父类中有个字段a,子类继承了父类的这个字段a,其实就是子类的那个内存区域里面也会有一个a字段,父类的内存区域中也有a字段,他们两个没有什么关系。

看完下面的代码你就明白了……

class Test0 {

public static String staticField = "父类-静态变量"

public String field = "父类-普通变量"

public Test0() {

System.out.println("父类-构造器")

}

static {

System.out.println(staticField)

System.out.println("父类-静态初始化块")

}

{

System.out.println(field)

System.out.println("父类-初始化块")

}

}

public class Test1 extends Test0{

public static String staticField = "子类*静态变量"

public String field = "子类*普通变量"

static {

System.out.println(staticField)

System.out.println("子类*静态初始化块")

}

{

System.out.println(field)

System.out.println("子类*初始化块")

}

public Test1() {

System.out.println("子类*子类构造器")

}

public static void main(String args[]) {

System.out.println("main方法")

Test1 test1 = new Test1()

}

}

输出结果为:

父类-静态变量

父类-静态初始化块

子类*静态变量

子类*静态初始化块

main方法

父类-普通变量

父类-初始化块

父类-构造器

子类*普通变量

子类*初始化块

子类*子类构造器