Java super关键字用法详解:访问父类成员与调用父类方法

何川
何川
发布时间:2026-10-15 | 2人浏览过
原创

在Java面向对象编程中,super 关键字主要用于引用当前对象的父类引用。它常被用于解决子类与父类同名成员的访问冲突,以及明确调用父类的构造函数或方法。本文将通过具体代码实例与内存模型分析,展示 super 的实际应用场景。

super 关键字的核心功能

super 是 Java 提供的保留字,代表对当前对象父类部分的引用。它在以下三种场景中发挥关键作用:

  1. 调用父类构造器:必须在子类构造器的第一行使用(例如 super()),且不可与 this() 共存。
  2. 访问被子类隐藏的变量:当子类定义与父类同名的成员变量时,直接使用变量名将访问子类的属性,此时需使用 super.变量名 强制访问父类的属性。
  3. 调用父类被重写的方法:在子类重写了父类方法后,若需在子类方法逻辑中保留或复用父类的原始行为,可使用 super.方法名() 进行调用。

第1步:构建具有继承关系的父子类结构

为了验证上述用法,我们设计一个包含属性与方法复写的简单场景。父类 FatherClass 持有整型 value,而子类 ChildClass 不仅继承了父类,还定义了自己的 value 并重写了 f() 方法。

class FatherClass {
  public int value;
  public void f() {
    value = 100;
    System.out.println("FatherClass.value:" + value);
  }
}

class ChildClass extends FatherClass {
  private int value;
  
  public void f() {
    // 核心动作:先执行父类的f()逻辑
    super.f();
    // 随后修改并输出子类自身的value
    value = 200;
    System.out.println("ChildClass.value:" + value);
    System.out.println(value);                // 此处直接打印,默认指代子类变量
    System.out.println(super.value);          // 显式使用super,指向父类变量
  }
}

public class TestInHerit {
  public static void main(String args[]) {
    ChildClass cc = new ChildClass();
    cc.f();
  }
}

第2步:观察控制台的执行结果

运行上述 TestInHerit 程序,控制台依次输出以下内容:

从输出中可以清晰地观察到两个维度的差异:
1. 第一行输出了 100,这是由 super.f() 触发的父类逻辑,其中父类的 value 被赋值为 100。
2. 后续输出的 200 则是子类局部作用域下的 value。这表明在同一个作用域块内,如果直接写 value,编译器优先匹配到的是子类自身定义的字段。

第3步:分析对象在内存中的布局分布

为了更好地理解为什么会出现这种“隔离”现象,我们需要查看堆内存中对象的实际构成:

当 new ChildClass() 被创建时,生成的对象并非仅仅包含子类独有的属性,而是包含了完整的层次结构。ChildClass 对象的内存布局实际上是由两部分叠加而成的:
- 上半部分包含从 FatherClass 继承而来的公共/私有成员变量和方法区链接;
- 下半部分追加 ChildClass 自己声明的特有成员。
这种物理上的合并存储方式,正是 super 能够准确定位到父类数据区域的底层基础。

以上就是对Java中super关键字用法与实际应用原理的详细内容,更多关于Java继承机制与对象模型的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表