重载是同一类中定义多个同名但参数不同的方法以提升调用灵活性;重写是子类按约定替换父类方法以实现多态。二者在发生位置、参数列表、绑定时机上本质不同:重载限于同类,参数须不同,编译期绑定;重写要求父子继承关系,参数必须完全一致,运行期动态绑定。

面试时讲重载和重写,关键不是背定义,而是用一句话说清“谁在哪儿改了什么、为什么这么设计”。你可以这样自然、有逻辑地展开:
先一句话锚定核心
重载是同一个类里加多个同名但参数不同的方法,让调用更灵活;重写是子类按约定替换父类已有的方法,让多态真正起作用。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。
重点对比三个维度,不罗列,讲清楚逻辑
第一,发生位置不同:
重载只发生在同一个类内部(比如 Calculator 里 add(int,int) 和 add(double,double));
重写必须发生在父子类之间,而且得是继承关系——没有 extends 或 implements,就谈不上重写。
第二,参数列表是分水岭:
重载靠参数区分:个数、类型、顺序,三者至少一个不同;
重写要求参数完全一致——哪怕把 String 改成 Object,JVM 就当它是新方法,不是重写,也不会动态绑定。
第三,绑定时机决定行为本质:
重载在编译期就定死了,看的是引用变量的声明类型;
重写在运行期才决定,看的是对象的实际类型。比如 Animal a = new Dog(); a.makeSound(),编译时只认 Animal,运行时却调 Dog 的实现——这才是多态的落地。
顺带提一句常见误区,显专业
很多人以为 static 或 private 方法能被重写,其实不能:
• static 方法属于类,调用不依赖对象,子类里同名方法只是“隐藏”,不是重写;
• private 方法子类根本看不见,自然也谈不上重写;
• final 方法被明确禁止重写,这是设计上对行为稳定性的保护。
讲完这些,再补个简单例子收尾,比如 Dog 继承 Animal 重写 bark(),或者 Calculator 类里几个 add() 版本,就非常扎实了。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










