一、方法的重载(overload)
(1)重载的概念:
在同一个类或父类与子类之间,允许存在一个以上的同名方法
(2)重载的特点:
参数列表必须不同,返回值和可见性无所谓
(3)重载示例:
//返回两个整数的和
int add(int x,int y){return x+y};
//返回三个整数的和
int add(int x,int y,int z){return x+y+z};
//返回两个小数的和
double add(double x,double y){return x+y};
二、方法的重写(override)
(1)定义:在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。在执行时,java自动判断是执行父类的方法还是执行子类的方法。在重写时,可@Override,编译器会自动检查是否符合规则。
(2)要求:签名必须一致
①子类重写的方法必须和父类被重写的方法具有相同的方法名称、参数列表(java不支持参数反协变)
②子类的重写方法的返回值类型不能大于父类被重写的方法的返回值类型(支持返回值协变)
③子类重写的方法使用的访问权限不能小于父类被重写的方法的访问权限
④子类不能重写父类中声明为final的方法
⑤子类方法抛出的异常不能大于父类被重写的方法的异常
(3)注意:子类与父类中同名的方法必须同时声明非static(即为重写),或者同时声明为static的(不是重写)。因 为static方法是属于类的,子类无法覆盖父类的方法
(4)返回值类型:
①父类被重写的方法的返回值类型是void,则子类重写的方法返回值类型只能是void
②父类被重写的方法的返回值类型是A类型(如Object),则子类重写的方法的返回值类型可以是A类或者A类的子类(如String)
③父类被重写的发放的返回值类型是基本数据类型(比如double),则子类重写的方法的返回值类型必须是相同的基本数据类型(必须也是double)
三、区分方法重载和重写
①二者的概念
②重写和重载的具体规则
③*重载:不表现为多态性
*重写:表现为多态性
④重载编译、重写运行时确定
*重载:允许存在多个同名方法,而这些方法的参数不同。它们的调用地址在编译期 就绑定了。Java重载 是可以包括父类和子类的,即子类可以重载父类的同 名不同参数的方法“早绑定”或“静态绑定”
*重写:只有等到方法调用的那一刻,解释运行器才会确认所要调用的具体方法 “晚绑定”或“动态绑定”