方法的重载
● 概念: 同一个类中相同的方法名不同的形参列表构成重载
两同一不同:
同一个类,同一个方法名,不同的形参列表
不同的形参列表 :形参的个数,类型,顺序不同。
● 如何确定类中某一个方法的调用:方法名 + 形参列表
注意 : 方法的重载和权限修饰符,返回值类型,形参的名字无关。
举例:
public void add(int a,int b){}
public void add(double a,double b){}
方法的重写
方法的重写:在子类中可以根据需要对从父类中继承来的方法进行改造,也称为方法的重置、覆盖。
注意:当子类重写了父类中的方法后,那么再通过子类对象调用相同的方法,实际上调用的是子类重写父类的方法。
为什么要有方法重写 :
- 如果子类对父类中的方法不满意那么可以考虑方法的重写
- 为了使用多态也会考虑方法的重写
说明 :
- 方法的格式:
权限修饰符 返回值类型 方法名(形参列表){
方法体;
}
-
说明:
①子类重写的方法的权限修饰符 不小于 父类被重写方法的权限修饰符。
②子类重写方法的方法名和形参列表必须和父类被重写方法的相同。
③父类被重写的方法的返回值类型 子类重写的方法的返回值类型
void void
基本数据类型 对应的基本数据类型
引用数据类型 对应的类型及子类的类型
③子类方法抛出的异常不大于父类被重写方法的异常 -
注意:
①父类中被private修饰的方法,子类不能重写。
②子类和父类中相同的方法要么同时加static(不是方法的重写)要么同时不加static(方法的重写)。因为static方法是属于类的,子类无法覆盖父类的方法。
从编译和运行的角度看方法的重载与重写
重载,是指允许存在多个同名方法,而这些方法的参数不同。编译器根据方法不同的参数表,对同名方法的名称做修饰。对于编译器而言,这些同名方法就成了不同的方法。它们的调用地址在编译期就绑定了。Java的重载是可以包括父类和子类的,即子类可以重载父类的同名不同参数的方法。 所以:对于重载而言,在方法调用之前,编译器就已经确定了所要调用的方法,这称为 “早绑定”或“静态绑定”;而对于多态,只有等到方法调用的那一刻,解释运行器才会确定所要调用的具体方法,这称为 “晚绑定”或“动态绑定”。