云计算百科
云计算领域专业知识百科平台

Java 面向对象核心入门(九):方法重写 Override|彻底分清重载与重写

「 Java 面向对象系列 09 」

📖 上篇回顾:Java 面向对象核心入门(八):继承详解|代码复用的核心-CSDN博客

上一篇我们学会了 继承 extends:子类可以拿到父类的所有公共方法。

但新问题来了:

如果父类的方法逻辑不适合子类,子类不想用父类旧逻辑,想 自己重新改写 怎么办?

答案就是:方法重写(Override)

重写是继承后最重要的操作,也是面试必考、和重载最容易混淆的知识点。

一、什么是方法重写?

重写:子类对父类已经存在的方法,进行重新实现、覆盖原有逻辑。

通俗理解:

父类有一个功能,子类不满意,不改父类代码,在子类自己重新写一遍,优先用子类自己的逻辑。

二、为什么需要重写?

举个场景:

父类 Person 有方法 say():普通人说话

子类 Teacher 继承后,想要 老师专属说话逻辑

这时就需要重写,覆盖父类方法。

三、重写完整实战案例

1. 定义父类

class Person{
public void say(){
System.out.println("普通人正常说话");
}
}

2. 子类重写父类方法

class Teacher extends Person{
// 重写父类say方法
@Override
public void say() {
System.out.println("老师讲课,温柔发言");
}
}

3. 测试运行

public class TestOverride {
public static void main(String[] args) {
Teacher t = new Teacher();
t.say(); // 执行的是子类重写后的方法
}
}

运行结果

老师讲课,温柔发言

✅ 可以看到:子类重写后,优先执行子类逻辑,父类方法被覆盖

四、重写的严格语法规则(必背)

想要构成合法重写,必须满足:

  • 发生在父子类之间(必须有继承)

  • 方法名、参数列表必须和父类完全一致

  • 访问权限不能比父类更小

  • 返回值、异常需要兼容

  • 建议加上注解:@Override(校验是否是合法重写)

  • 五、@Override 注解的作用

    很多新手不知道这个注解干嘛的,其实非常重要:

    ✅ 自动校验当前方法 是否是合法重写

    ✅ 写错方法名、参数不对、权限不对,直接爆红报错

    ✅ 提高代码可读性,一眼看出这是重写方法

    举个例子:注解帮你自动纠错

    class Person {
    public void say() {
    System.out.println("普通人正常说话");
    }
    }

    class Teacher extends Person {
    // ✅ 正确重写
    @Override
    public void say() {
    System.out.println("老师讲课,温柔发言");
    }

    // ❌ 写错方法名,编译报错!
    @Override
    public void sayy() { // 父类没有 sayy() 方法
    System.out.println("老师讲课");
    }

    // ❌ 参数列表不一致,编译报错!
    @Override
    public void say(String word) { // 父类是 say(),参数不同
    System.out.println("老师说:" + word);
    }
    }

    加上 @Override 后,一旦写错(方法名写错、参数不对),编译器会直接报错提示,不用等到运行时才发现问题。

    开发中 强烈建议每次重写都加上 @Override,让编译器帮你把关。

    六、哪些方法不能被重写?

  • private 私有方法(子类根本看不到)

  • static 静态方法(属于类,不属于对象)

  • final 最终方法(禁止重写)

  • 构造方法(不能继承自然不能重写)

  • 七、重载 VS 重写 终极对比(新手必看)

    这是 Java 面试最容易混淆的两大概念!

    对比项重载 Overload重写 Override
    发生范围 本类内部 父子类之间(需要继承)
    方法名 相同 相同
    参数列表 必须不同 必须完全相同
    返回值 无关 必须兼容
    权限 无关 不能缩小权限
    注解 不需要 推荐 @Override
    作用 方法多样化调用 子类覆盖父类逻辑

    八、开发中重写最常用场景

  • 父类通用逻辑不满足子类需求,需要自定义行为

  • 项目中几乎所有实体类都会 重写 toString()

  • 框架开发大量依赖重写做功能扩展

  • 九、新手高频踩坑

    坑1:重写时参数列表写错

    参数类型/个数不一致,不是重写,是新方法!

    坑2:重写权限比父类更小

    父类 public,子类不能写 default / private,编译报错

    坑3:静态方法当成重写

    static 方法不叫重写,叫隐藏,完全两回事

    坑4:分不清重载和重写

    记住一句话:本类同名不同参是重载,父子同名同参是重写

    十、全文核心小结

  • 重写基于继承,子类覆盖父类原有方法逻辑

  • 重写要求:方法名、参数列表完全一致,权限不缩小

  • 使用 @Override 注解校验,杜绝写错

  • private、static、final、构造方法不能重写

  • 重载看参数不同,重写看父子覆盖

  • 🚀 下篇预告:重写之后,我们想在子类中 调用父类原本的方法 怎么办?下一篇详解 super 关键字,完美搭配 this、继承、重写!

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Java 面向对象核心入门(九):方法重写 Override|彻底分清重载与重写
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!