方法重载和重写,光从名称上来说,很类似,也很容易弄错,接下来我们先简述两者的区别和联系。
1. 方法重载
首先方法重载是同一个类中的不同方法间的关系,这些方法具有同名(方法名一样),但是具有不同的参数列表(参数的个数和参数的类型不同)。方法重载其实是同一个类中多态性的表现,调用者可以依据传入不同个数或者不同类型的参数来决定最终调用哪一个同名的方法。方法重载其实是程序编译时的多态性,即代码在编译的时候就决定了使用哪一个方法。
方法重载的原则:
1.1 两者的方法名称一致
1.2 必须具有不同的参数列表(参数的个数和参数的类型)
1.3 可以有不同的参数返回类型
1.4 可以有不同的访问修饰符
1.5 可以抛出不同的异常
2. 方法重写
方法重写是子类与父类间的关系,子类的方法与父类的方法具有相同的方法名,相同的返回类型,相同的参数列表。方法重写其实是父类与子类间的一种多态性的表现。方法重写其实是代码运行时的多态性,即只有在代码真正运行的时候,才能决定到底使用哪一个真正的方法。
方法重写的原则:
2.1 子类不能重写父类中定义为final类型的方法
2.2 子类中必须重写父类中定义为abstract
2.3 重写方法必须具有相同的参数列表(参数个数和参数类型)
2.4 重写方法必须具有相同的返回类型
2.5 子类中重写的方法的访问修饰符一定要大于父类中被重写方法的访问修饰符(public>protected>default>private)
2.6 子类中重写的方法一定不能抛出新的检查异常或者比父类中被重写的方法申明的更加宽泛的检查型异常,例如:父类中的一个方法抛出了一个IOException的异常,那么其子类中重写的该方法只能抛出IOException异常的子异常,不能抛出IOException的父异常(Exception)
2.7 父类中的静态方法不能被重写的,父类中的方法不能被重写为静态方法
上一篇
下一篇