实例化Java对象时,父类是自动创建的对象吗?

时间:2013-10-11 08:47:41

标签: java java-memory-model

假设我创建了一个对象,并运行了父类的一个构造函数。使用此构造函数,在幕后创建父对象的新对象?

如果没有,父类的private字段存储在哪里?您实际上可以调用父对象的任何方法(使用或不使用super),该方法操作对调用对象不可见的私有字段。

如果有人最熟悉Java内存模型,那么非常欢迎他或她的回答!

3 个答案:

答案 0 :(得分:10)

  

使用此构造函数,在幕后创建父对象的新对象?

不,只创建了一个实例。创建的实例包含当前类及其所有超类的属性。

  

如果没有,父类的私有字段存储在哪里?

与所有类属性一样,它们存储在堆上。如果它们是在当前类或超类中定义的,则在内存位置方面没有区别。

答案 1 :(得分:0)

它不会创建两个对象,只会创建子类对象。

从其他类继承时,必须在构造函数中调用super()。如果不这样做,编译器将为您插入该调用,您可以清楚地看到。

调用超类构造函数,否则对象将保持未初始化状态。

答案 2 :(得分:0)

记住继承是一个"是一个"基类和子类之间的关系,因此每次有子类的实例时,根据定义,您还将拥有基类的实例(作为实例的一部分,而不是两个单独的实例)。要正确初始化基类,需要调用构造函数。