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

Java继承中为什么不使用super关键字也能调用父类的方法和属性?

Java继承成员访问规则解答

根本原因:子类已经继承了父类的对应成员

Java的继承机制中,子类会自动获得父类所有可访问的成员(属性和方法),你不需要加super就能直接调用,本质是你调用的是子类从父类继承后属于自身的成员,不是直接跨类调用父类的成员。
你当前代码满足两个可继承条件:

  1. 父类的subject属性、intro()方法都用的是默认(包)访问权限,且父子类在同一个默认无名包下,符合继承的访问权限要求
  2. 你没有在子类中定义和父类同名的intro()方法、subject属性,没有出现成员遮蔽/方法重写的情况

什么时候才需要使用super关键字访问父类成员?

只有当子类出现和父类同名的成员,需要明确区分访问父类版本的时候,才必须用super:
比如你给子类加一个重写的intro()方法,就能看出区别:

class ChildClass extends ParentClass {
  ChildClass(String name) {
    super(name);
  }

  // 重写父类的intro方法
  void intro () {
    System.out.println("子类自定义的intro方法");
  }

  void getMethodParent() {
    intro(); // 调用的是子类自己重写的intro,输出"子类自定义的intro方法"
    super.intro(); // 必须加super才能调用父类原本的intro,输出"Learn Java"
  }
}

如果子类没有重写父类方法,也没有定义同名属性,intro()和super.intro()的执行效果完全一致,不需要额外加super。

补充说明访问权限的影响

如果父类的成员用private修饰,子类就算继承了也不能直接访问,必须通过父类提供的public/protected访问方法才能调用,这种情况下就算加super也没法直接访问私有成员。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:54:03