假设我创建了一个对象,并运行了父类的一个构造函数。使用此构造函数,在幕后创建父对象的新对象?
如果没有,父类的private
字段存储在哪里?您实际上可以调用父对象的任何方法(使用或不使用super
),该方法操作对调用对象不可见的私有字段。
如果有人最熟悉Java内存模型,那么非常欢迎他或她的回答!
答案 0 :(得分:10)
使用此构造函数,在幕后创建父对象的新对象?
不,只创建了一个实例。创建的实例包含当前类及其所有超类的属性。
如果没有,父类的私有字段存储在哪里?
与所有类属性一样,它们存储在堆上。如果它们是在当前类或超类中定义的,则在内存位置方面没有区别。
答案 1 :(得分:0)
它不会创建两个对象,只会创建子类对象。
从其他类继承时,必须在构造函数中调用super()。如果不这样做,编译器将为您插入该调用,您可以清楚地看到。
调用超类构造函数,否则对象将保持未初始化状态。
答案 2 :(得分:0)
记住继承是一个"是一个"基类和子类之间的关系,因此每次有子类的实例时,根据定义,您还将拥有基类的实例(作为实例的一部分,而不是两个单独的实例)。要正确初始化基类,需要调用构造函数。