关于java中创建子类对象时,父类对象到底创建不创建

关于java中创建子类对象时,父类对象到底创建不创建


一个对象可以理解为一个房子,而一个类只是规定了什么地方要放什么东西,比如客厅要放沙发,餐厅要有餐桌
创建一个新对象,就是建造一栋新房子,如果你不去初始化对象,那么这个房子就是空的,没有任何装饰家具,你也不能用它来做任何有意义的事(当然这只是个比喻,空房子不能说没有用)
当调用构造函数时,才会真正让这个对象有意义,那就是布置这个房子,布置这个房子有很多设计师,子类和父类就是两个设计师,他们之间的关系可以理解为父类设计师是子类设计师的指导,首先子类会让父类先来,父类说他要A B C D E等等,于是就叫人搬来这些东西放在房子里,父类布置好了,子类就来布置了,子类就会继续在房子里添置家具等等,有时候父类和子类会有冲突,比如父类说瓷砖地板好,子类说木地板好,这时候以子类为准,因为最终这个房子是给子类的,父类只是一个顾问指导而已,这就相当于方法重写。

所以如果你说创建一个子类对象会不会同时也创建了父类对象,那答案肯定是没有
说有的如果他的意思是这个子类对象在某个时刻完全是一个父类对象,因为那个时刻他具备了父类对象所有的特征,但不具备子类的特征,那还是可以接受的,但这个过程只会创建一个对象,如果说有的认为创建了两个或者更多的对象,那肯定是错误的。

JVM 上 new 一个对象包含 NEW 指令与 INVOKE_SPECIAL 指令调用,前者完成创建对象的操作,后者调用新创建出来对象的 方法(也就是用来初始化)。
当在子类的 constructor 里调用 super(xxx) 的时候只是调用了父类的 方法。

解析:Java 创建对象的几种方式(重要):
(1) 用 new 语句创建对象,这是最常见的创建对象的方法。 (2) 运用反射手段,调用 java.lang.Class 或者 java.l ang.reflect.Constructor 类的 newInstance() 实例方法。 (3) 调用对象的 clone() 方法。 (4) 运用反序列化手 段,调用 java.io.ObjectInputStream 对象的 readObject() 方法。
(1)和(2)都会明确的显式的调用构造函数 ;(3)是在内存上对已有对象的影印,所以不会调用构造函数 ;(4)是从 文件中还原类的对象,也不会调用构造函数。

猜你喜欢

转载自blog.csdn.net/weixin_43750747/article/details/92765156