请问,在创造子类对象时,会自动调用父类构造方法,然后再调用子类构造方法,那么它有没有创造父类对象呢?
对于常规意义上的对象,如果将对象看为可以引用的类变量实例,那当然是没有;不过的确创建子类时的确在内存中开辟了一个内存区建立了父类(包括private)在内的实例域,但父类对应内存无法直接引用无法简单成为对象(在编译器层次上可以将这个内存等同于一个父类对象处理,这需要高超的技巧)。因此物理内存概念和java语言层次就能很好理解这个问题。
参考了别人的问题,我自己来答。
答案是没有。参见帖子
精彩答案:
一个对象可以理解为一个房子,而一个类只是规定了什么地方要放什么东西,比如客厅要放沙发,餐厅要有餐桌
创建一个新对象,就是建造一栋新房子,如果你不去初始化对象,那么这个房子就是空的,没有任何装饰家具,你也不能用它来做任何有意义的事(当然这只是个比喻,空房子不能说没有用)
当调用构造函数时,才会真正让这个对象有意义,那就是布置这个房子,布置这个房子有很多设计师,子类和父类就是两个设计师,他们之间的关系可以理解为父类设计师是子类设计师的指导,首先子类会让父类先来,父类说他要A B C D E等等,于是就叫人搬来这些东西放在房子里,父类布置好了,子类就来布置了,子类就会继续在房子里添置家具等等,有时候父类和子类会有冲突,比如父类说瓷砖地板好,子类说木地板好,这时候以子类为准,因为最终这个房子是给子类的,父类只是一个顾问指导而已,这就相当于方法重写。
所以如果你说创建一个子类对象会不会同时也创建了父类对象,那答案肯定是没有
说有的如果他的意思是这个子类对象在某个时刻完全是一个父类对象,因为那个时刻他具备了父类对象所有的特征,但不具备子类的特征,那还是可以接受的,但这个过程只会创建一个对象,如果说有的认为创建了两个或者更多的对象,那肯定是错误的。
出处:帖子第九楼