面试题目:写出方法覆盖(override)和方法重载(overload)区别。
方法的重载:overload
a. 方法重载:在一个类中定义多个同名方法,但是形参列表不同。
b. 方法重载的要求:
I. 方法名相同
II. 形参列表不同(个数、顺序、类型)
III. 修饰符、返回值类型、异常没有要求
注意:只是形参名字不同不能构成方法的重载
public void m1(int n){}
public void m1(int i){}// 重复,不允许
c. 使用:在调用时 对象名.方法名(实参);
自动根据给定的实参匹配对应形参方法
d. 注意:根据实参匹配对应形参时,先精确匹配,精确匹配不成功,再就近
向上匹配,如果就近向上匹配不成功,则编译报错;注意避免陪陪
混淆现象
public void m1(int i,double d){}
public void m1(double d,int i){}
// 如果 mc.m1(10,10);匹配混淆
e. 好处:可以屏蔽因参数不同而导致方法实现不同及名字不同的差异;
方便外界调用
f. 应用场景:一种功能方法因形参带来的实现不同时,避免名字太多而造成调用繁琐
方法的覆盖(override)(方法的重写)
(1) 概念:子类中定义和父类中相同的方法。
(2) 方法覆盖的要求:
a. 子类的方法名、返回值类型、形参列表和父类相同
b. 子类的方法访问修饰符和父类相同或是比父类更宽
(3) 使用:子类对象名.方法名(实参);// 优先使用子类覆盖后的方法
(4) 注意:
a. 子类定义类和父类方法名相同、形参列表相同,但是返回值不同,编译
报错
b. 子类定义和父类方法名相同、形参列表不同的方法,编译通过,运行也
通过,但是此应用为特殊的方法重载