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

Java继承理解咨询:子类重写父类方法场景的困惑

Java方法重写(Overriding)场景详解:你的子类代码拆解

Hey there! Let's walk through your code step by step and clear up all the confusion around method overriding in this inheritance scenario.

1. 先明确:你写的就是标准的方法重写

你在SubClass中定义的sharedMethod(),完全符合Java方法重写的核心要求:

  • 方法名、参数列表(这里无参数)和父类SuperClass的sharedMethod()完全一致
  • 访问修饰符public和父类保持一致(允许更宽松,但不能更严格,比如父类是public,子类不能用private)
  • 返回类型void和父类完全匹配

简单说:子类重新实现了父类的同名方法,这就是重写——目的是让子类拥有专属的方法逻辑,替代父类的默认实现。

2. 构造器里的super()为什么必须写?

看你的SuperClass,它只定义了带参构造器public SuperClass(String name, int age),没有默认的无参构造器。在Java中,子类构造器必须在第一行调用父类的构造器:

  • 如果父类有默认无参构造器,编译器会自动帮你加super();
  • 但父类只有带参构造器时,你必须显式调用super(name, age);,否则编译直接报错

你的代码里已经做了这一步,非常正确!这行代码的作用是让父类先完成自身属性(name和age)的初始化,子类才能正常继承这些属性(虽然父类用private修饰,子类不能直接访问,但可以通过后续添加的getter方法获取)。

3. 重写后的方法调用逻辑

当你创建SubClass的实例并调用sharedMethod()时,会执行子类的版本,而不是父类的:

SubClass sub = new SubClass("Alice", 25);
sub.sharedMethod(); // 输出:I'm ...

如果想在子类的重写方法中同时调用父类的原方法,可以用super.sharedMethod(),比如修改子类代码:

@Override
public void sharedMethod() {
    super.sharedMethod(); // 先执行父类的方法逻辑
    System.out.println("I'm the overridden method in SubClass");
}

这样调用后会先输出父类的I'm a shared method in the SuperClass,再输出子类的内容。

4. 给你的优化建议:加上@Override注解

强烈建议在重写的方法上加上@Override注解,比如:

@Override
public void sharedMethod() {
    System.out.println("I'm ...");
}

这个注解的作用是让编译器帮你校验:这个方法是不是真的重写了父类的方法。如果方法名写错(比如写成shareMethod)、参数列表不一致,编译器会直接报错,避免你不小心写出一个全新的方法而不是重写。

5. 多态的体现:父类引用指向子类实例

如果用父类类型的变量指向子类实例,调用sharedMethod()依然会执行子类的版本——这就是Java的动态绑定特性,也是多态的核心:

SuperClass obj = new SubClass("Bob", 30);
obj.sharedMethod(); // 还是输出:I'm ...

运行时JVM会根据实际对象的类型(这里是SubClass)来调用对应的方法,而不是变量的声明类型。

最后再划几个重写的红线

  • 父类的私有方法不能被重写:因为子类根本访问不到父类的私有方法
  • 静态方法不能被重写:那叫方法隐藏(hiding),逻辑和重写完全不同,调用时看的是变量的声明类型,不是实际对象类型
  • 重写方法的抛出异常范围不能比父类方法更宽泛(比如父类抛出IOException,子类不能抛出Exception)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:32:05