Java在创建子类对象的同时会不会创建父类对象

1.在thingking in java 的第四版第六章中明确的说了,子类对象中封装了父类对象,

2."When you create an object of the derived class, it contains within it a subobject of the base class. This subobject is the same as if you had created an object of the base class by itself. It’s just that from the outside, the subobject of the base class is wrapped within the derived-class object."
这里说派生类拥有一个父类的亚对象(subobject),是指派生类的对象中的一部分与父类对象是相同的。这个亚对象不是一个实际的对象,是无法独立于派生类对象之外的。

3.子类在创建实例后,类初始化方法会调用父类的初始化方法(除了java.lang.Object类,因为java.lang.Object类没有父类),而这种调用会逐级追述,直到java.lang.Object的初始化方法。
这个地方是初始化方法,而不是构造方法,因为构造方法是相对于java源程序而言,而编译后的class文件是初始化方法即" <init>"方法,初始化方法由java源程序的三个部分组成的,一个部分是成员字段后的直接的初始化语句,例如private int i=0;,第二个部分是由初始化块组成,例如:public class Test{ { this.i=4; \\do something...... } }
第三个部分就是java源代码中的构造方法中的代码,java源代码中有几个构造方法,那么class文件中就有几个初始化方法,编译器会把第一部分与第二部分分别复制到每个初始化方法的前端,然后把初始化方法对应参数的构造方法的代码复制到相应初始化方法中
调用初始化方法并不会生成对象
想象你的父类是一个抽象类,那么抽象类又如何能够产生对象呢

(对象的创建就是根据在堆上有没有开辟实例域的数据空间)

猜你喜欢

转载自happyqing.iteye.com/blog/2228557
今日推荐