创建子类对象时是否会生成父类对象?super调用相关技术疑问
创建子类对象时的父类相关问题解答
咱们把这两个问题拆开来聊,说得明明白白:
1. 创建子类对象时,会不会生成单独的父类对象?
答案是不会。当你创建一个子类对象的时候,JVM只会生成一个完整的子类对象——这个对象里包含了父类定义的所有属性和方法的实现,但绝对不会额外生成一个独立的父类对象。
举个Java的例子就好懂了:
class Parent { String parentProp = "父类属性"; public Parent() { System.out.println("父类构造方法执行"); } } class Child extends Parent { String childProp = "子类属性"; public Child() { super(); // 显式调用父类构造,默认也会隐式执行 System.out.println("子类构造方法执行"); } } public class Test { public static void main(String[] args) { Child kid = new Child(); // 验证:只有一个对象,同时属于Child和Parent类型 System.out.println(kid instanceof Child); // 输出true System.out.println(kid instanceof Parent); // 输出true // 直接打印对象,看内存地址是同一个 System.out.println(kid); // 类似 Child@6d06d69c } }
运行这段代码,你会看到父类构造先执行,子类构造后执行,但最终只有一个Child对象在内存里——父类构造的作用只是初始化这个子类对象里属于父类的那部分属性,而不是生成新对象。
2. 调用super是加载父类,还是生成父类对象?
都不是,得分开说:
- 父类的加载:早在子类被类加载器加载的时候(也就是程序启动、第一次用到子类的时候),父类就已经被加载到JVM中了,和你创建对象时调用
super完全没关系。 super()的作用:它只是调用父类的构造方法,用来初始化子类对象中属于父类的成员变量和执行父类构造里的逻辑,根本不会生成父类对象。
简单说,super()就是让子类对象“继承”的那部分先完成初始化,保证整个对象的完整性,仅此而已。
内容的提问来源于stack exchange,提问作者Shubham Sharma
相关产品推荐
相关产品推荐

