方法的重写(override)两同两小一大原则:
方法名相同,参数类型相同
子类返回类型小于等于父类方法返回类型,
子类抛出异常小于等于父类方法抛出异常,
子类访问权限大于等于父类方法访问权限
方法的重载(overload)原则:
方法名相同,参数个数或类型必有一个不同
返回值类型可相同,可不同。
访问权限可随意改变。
重写:
1、被覆盖的方法不能是final类型的。因为final修饰的方法是无法覆盖的。
2、被覆盖的方法不能为private。否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
3、被覆盖的方法不能为static。所以如果父类中的方法为静态的,而子类中的方法不是静态的,但是两个方法除了这一点外其他都满足覆盖条件,那么会发生编译错误。反之亦然。即使父类和子类中的方法都是静态的,并且满足覆盖条件,但是仍然不会发生覆盖,因为静态方法是在编译的时候把静态方法和类的引用类型进行匹配。
当父类中的方法被重写了后,除非用super关键字,否则就无法再调用父类中的方法了。
重载:
可以发生在一个类本身亦可以发生在继承类,要求方法名一致,参数列表不同(参数名,参数个数,参数顺序),返回值无要求。
重写和重载的区别
-
方法重写要求参数列表必须一样,而重载则要求必须不同。
-
方法重写只能用于子类重写父类方法 ,重载不仅可以重载父类的方法还可以重载自身的方法。
-
方法重写对方法的访问权限有特殊的要求,而重载则不作要求。
-
一个方法只能被子类重写一次,而一个方法能在改类本身或子类重载多次。