You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java继承中super()疑问:子类对象是否继承父类对象?

关于Java继承中父类对象的误区解析

嘿,这个问题其实戳中了Java继承里很容易混淆的点——很多人都会误以为子类对象是“套”了一个独立的父类对象,但实际情况不是这样的,咱们一步步拆解清楚:

核心结论:子类对象并没有继承一个独立的父类对象

当你执行B b = new B();时,JVM不会创建一个单独的父类A对象。super()(不管是显式还是隐式调用)的作用是初始化子类对象中属于父类的那部分状态和属性,而不是生成一个全新的父类实例。

用你的代码例子具体说明

假设你的子类是CompCalculator(补全你没写完的代码),完整代码如下:

class HumanCalculator { 
    String madeBy; 
    HumanCalculator(String madeBy){ 
        this.madeBy = madeBy; 
    } 
} 

class CompCalculator extends HumanCalculator {
    int softwareVersion;

    // 子类构造器必须调用父类构造器
    CompCalculator(String madeBy, int version) {
        super(madeBy); // 这里不是创建HumanCalculator对象,而是初始化当前子类对象里的madeBy字段
        this.softwareVersion = version;
    }
}

当你创建子类对象时:

CompCalculator calc = new CompCalculator("jwkoo", 1);

此时内存中只有一个CompCalculator对象,它的内存空间里同时包含了父类的madeBy字段和子类自己的softwareVersion字段。super(madeBy)只是把madeBy的值赋值给这个子类对象里的父类字段,完全没有生成独立的HumanCalculator实例。

为什么会有“创建父类对象”的误解?

这是因为Java的构造器调用链:创建子类对象时,会先调用父类构造器,再执行子类构造器。但这个过程只是初始化顺序的问题——先把父类定义的属性初始化好,再处理子类自己的属性,全程都是在同一个对象的内存空间里操作,没有新对象生成。

一句话总结

Java的继承是子类继承父类的属性和方法定义,子类对象会包含父类的状态,但不存在“子类对象继承了一个父类对象”的情况,整个过程只有一个子类实例,super()只是负责初始化这个实例里的父类部分。

内容的提问来源于stack exchange,提问作者jwkoo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:46:30