重载(Overloading)和重写(Overriding)的区别?
请对比Java中方法重载和方法重写的区别,包括定义位置、参数列表、返回类型、访问修饰符、异常抛出等方面,并给出典型代码示例。
回答
Yahuda
重载(Overloading):同一个类中,方法名相同但参数列表不同(参数个数、类型、顺序至少一项不同)。与返回类型无关,编译时多态。
void print(int a) {}
void print(String s) {}
重写(Overriding):子类对父类允许访问的方法重新实现。要求:方法签名相同,返回类型相同或子类(协变返回),访问权限不能更严格,异常不能更宽泛。运行时多态。
@Override
public String toString() { return ...; }
关键区别:重载是编译期行为,重写是运行期行为;重载基于参数列表区分,重写基于继承关系;重载不要求返回类型,重写要求返回类型兼容。