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

「 Java 面向对象系列 09 」

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

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

但新问题来了:

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

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

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

一、什么是方法重写?

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

通俗理解:

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

二、为什么需要重写?

举个场景:

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

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

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

三、重写完整实战案例

1. 定义父类

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

2. 子类重写父类方法

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

3. 测试运行

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

运行结果

复制代码
老师讲课,温柔发言

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

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

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

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

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

  3. 访问权限不能比父类更小

  4. 返回值、异常需要兼容

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

五、@Override 注解的作用

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

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

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

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

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

java 复制代码
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,让编译器帮你把关。

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

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

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

  3. final 最终方法(禁止重写)

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

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

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

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

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

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

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

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

九、新手高频踩坑

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

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

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

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

坑3:静态方法当成重写

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

坑4:分不清重载和重写

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

十、全文核心小结

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

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

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

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

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

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

相关推荐
LaughingZhu1 小时前
Product Hunt 每日热榜 | 2026-09-08
java·ide·深度学习·百度·intellij-idea
IT枫斗者枫哥2 小时前
Java 文件导出:写完了,为什么还不能标记成功?
java
陈皮波比茶2 小时前
java笔记-typora快捷键
java
蚂蚁雅嘿2 小时前
maven标签日常总结
java·maven
洋不写bug2 小时前
二叉树(二) 常见基础操作解析|结点数、树高、查找结点、判断完全二叉树
java·开发语言·数据结构·完全二叉树·二叉树结点数·树高·查找结点
菠萝加点糖2 小时前
Maven 坐标系统说明
java·maven
hm宋2 小时前
Canal 升级 jar 包操作文档(以升级 FastJSON 为例)
java·canal·jar
后台模板学习2 小时前
学习的心态高频面试题
java·数据库·学习
用户3126874877203 小时前
线程池到底怎么管理线程的?从 ThreadPoolExecutor 到拒绝策略全链路拆解
java