一、重载
如果同一个类中包含了两个或两个以上方法名相同、但有有不同的参数列表,则称为方法的重载,也可称该方法被重载了。
重载可以理解为一个类中的多态
说明:
1.参数列表不同包括:个数不同、顺序不同、类型不同。
2.仅仅参数变量名称不同是不可以的。
3.跟成员方法一样,构造方法也可以重载。
4.声明为final的方法不能被重载。
5.声明为static的方法不能被重载,但是能够被在此声明。
方法的重载的规则:
1.方法名称必须相同。
2.参数列表必须不同。
3.方法的返回类型可以相同也可以不相同。
4.仅仅返回类型不同不足以称为方法的重载
二、重写
1.方法的重写: 子类出现了与父类相同方法名称、参数列表和返回类型的方法,这个我们就称作为方法的重写。
2.方法重写的前提: 必须要存在继承的关系。
3.什么是时候要使用方法的重写:父类的功能无法满足子类的需求时。
方法重写要注意的事项:
1.方法重写时, 方法名与形参列表必须一致。
2.方法重写时,子类的权限修饰符必须要大于或者等于父类的权限修饰符。
3.方法重写时,子类的返回值类型必须要小于或者 等于父类的返回值类型。
4.方法重写时, 子类抛出的异常类型要小于或者等于父类抛出的异常类型。 Exception(最坏)
当方法重写时需要父类中原有的方法,可使用super关键字,该关键字引用当前类的父类。
三、重载与重写的区别
重写(Overriding)和重载(Overloading)是Java多态性的不同表现。
一般重写针对子类继承父类,重写父类的方法,通过动态绑定;而重载是同一方法名,参数列表不同,重载可以理解为一个类中的多态。
在java中重载是由静态类型确定的,在类加载时就可以取确定,属于静态分派;而重写是由动态类型确定的,是在运行时确定的,属于动态分派。动态分派是由虚方法实现的,虚方法表中存在着各个方法的实际入口地址,若父类中的某个子方法没有被重写,则父类与子类的方法表中的方法地址相同;若重写了,则子方法表的地址指向重写后的地址。
重写与重载之间的区别
方法重载:
1、同一个类中
2、方法名相同,参数列表不同(参数顺序、个数、类型)
3、方法返回值、访问修饰符任意
4、与方法的参数名无关
方法重写:
1、有继承关系的子类中
2、方法名相同,参数列表相同(参数顺序、个数、类型),方法返回值相同
3、访问修饰符,访问范围需要大于等于父类的访问范围
4、与方法的参数名无关