在Java面向对象编程中,重载(Overload)和重写(Override)是两个极易混淆但又至关重要的概念。它们都与方法的复用和多态特性密切相关,但应用场景、实现规则和核心作用却截然不同。今天这篇文章,就带大家理清二者的本质区别,结合实例帮你彻底吃透!
重载的核心是“同一类中,方法名相同,参数列表不同”,简单说就是“同名不同参”。它是编译时多态的体现,编译器会根据调用方法时传入的参数类型、个数、顺序来匹配对应的方法。

上述代码中,4个show方法因参数列表不同构成重载,调用时编译器会精准匹配对应的方法,这就是重载的核心作用——让同一个方法名适配不同的参数场景,提升代码可读性和复用性。
重写的核心是“子类继承父类后,重写父类中已有的方法”,简单说就是“子类改写父类的方法”。它是运行时多态的体现,只有在程序运行时,才会根据对象的实际类型(而非声明类型)调用对应的重写方法。

上述代码中,Child类重写了Parent类的show方法,通过@Override注解可以显式告诉编译器这是重写方法,避免因拼写错误等问题导致的bug。而多态场景下(Parent p2 = new Child()),程序运行时会调用实际对象(Child)的重写方法,这就是重写的核心作用——让子类根据自身需求改写父类的通用逻辑,实现程序的扩展性。
对比维度 | Overload(重载) | Override(重写) |
|---|---|---|
存在范围 | 同一类中(或子类与父类的同名不同参方法,也算重载) | 子类与父类之间(继承关系) |
方法名 | 必须相同 | 必须相同 |
参数列表 | 必须不同(类型/个数/顺序) | 必须完全相同 |
返回值类型 | 可以不同(不影响重载判断) | 必须小于等于父类返回值类型(协变返回) |
访问修饰符 | 无限制 | 子类权限 ≥ 父类权限 |
异常声明 | 无限制 | 子类异常 ≤ 父类异常(不能更宽泛) |
多态类型 | 编译时多态(静态绑定) | 运行时多态(动态绑定) |
核心作用 | 提升代码可读性,适配不同参数场景 | 扩展父类逻辑,实现程序灵活性 |
关键注解 | 无专用注解 | @Override(显式声明,编译器校验) |
一句话分清二者核心:重载看“同名不同参”(编译时绑定),重写看“子类改写父类方法”(运行时绑定)。
重载是同一类中方法的“横向扩展”,让一个方法名适配多种参数;重写是子类对父类方法的“纵向改写”,让子类拥有专属的逻辑实现。理解二者的区别,不仅能避免编码中的常见bug,更能深刻掌握Java面向对象的多态特性,写出更灵活、可扩展的代码。
如果觉得有用,欢迎点赞收藏~ 有疑问的话,评论区留言交流哦!