重载(Overload)
定义:
方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。
调用重载方法时,Java编译器能通过检查调用的方法的参数类型和个数选择一个恰当的方法。方法重载通常用于创建完成一组任务相似但参数的类型或参数的个数或参数的顺序不同的方法。最常用的地方就是构造器(构造方法)的重载。
重载是在一个类里面,方法名字相同,而参数列表不同。
参数列表不同分为:
- 参数个数不同
- 参数类型不同
- 参数类型顺序不同
第一种情况:参数个数不同
第二种情况:参数类型不同
第二种情况:参数类型顺序不同
重载注意事项:
-
方法名一样,参数类型一样,只有返回值不一样,这个不构成重载
-
只有形参的名称不同,不构成方法重载
如:
为什么要方法重载
方法重载可以提高可读性。如果没有重载,两个参数的sum(int a,int b)存在后,就不能存在三个参数的sum(int a,int b,int c),或者说三个参数的sum方法必须改名,也就是sum1(int a,int b,int c);而重载可以解决这个问题。
重写(Override)
子类中出现和父类中一模一样的方法(包括返回值类型,方法名,参数列表),也被称为方法覆盖、方法复写。
约定俗成:子类中的叫重写方法,父类中的叫被重写的方法。
重写注意事项:
1、方法重写时, 方法名与形参列表必须一致。
2、子类的权限修饰符必须要大于或者等于父类的权限修饰符。
3、返回值类型:
- 父类被重写的返回值类型是void,则子类重写的方法的返回值类型只能是void
- 父类被重写的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类或者是A类的子类
- 父类被重写的返回值类型是基本数据类(如:int),则子类重写的方法的返回值类型必须相同
4、子类重写的方法抛出的异常类型要小于或者等于父类被重写的方法抛出的异常类型。 Exception(最坏) RuntimeException(小坏)
权限修饰符 : private < 默认(什么都不写) < protected < public
特殊情况:子类不能重写父类中声明为private权限的方法
上图中对父类的show();方法尝试重写,发现子类中重写方法前并没有重写的标志,测试后发现:
- 父类中walk();方法调用show();方法还是父类的,并不是子类的。而walk()方法调用被成功重写的eat();方法则是子类的方法!
- 说明父类中声明为 private的方法不能被重写!
重写的前提:必须存在继承关系。
重写的应用场景:
- 当父类中的方法无法满足子类需求的时候,需要方法重写
- 当子类具有特有的功能的时候,就需要方法重写
子类可以根据需要,定义特定于自己的行为。既沿袭了父类的功能名称,又根据子类的需要重新实现父类方法,从而进行扩展增强。