重载与重写
Posted lhztech
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了重载与重写相关的知识,希望对你有一定的参考价值。
方法重写(Override ):
子父类出现了一模一样的方法,与返回值类型有关,返回值是一致(注意:返回值类型可以是子父类)
当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法。这样,即沿袭了父类的功能,又定义了子类特有的内容。
方法重写注意事项:
a:父类中私有方法不能被重写,因为父类私有方法子类根本就无法继承
b:子类重写父类方法时,访问权限不能更低
c:父类静态方法,子类也必须通过静态方法进行重写,其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写,其实是静态只能覆盖静态。子类重写父类方法的时候,最好声明一模一样。
方法重载(Overload ):
在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。
本类中出现的方法名一样,参数列表不同的方法。与返回值类型无关。子类对象调用方法的时候:先找子类本身,再找父类。
重写方法的规则:
1)、参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。
2)、返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。
3)、访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)
4)、重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。例如:父类的一个方法申明了一个检查异常IOException,在重写这个方法是就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。
重载的规则:
1)、必须具有不同的参数列表;
2)、可以有不同的返回类型,只要参数列表不同就可以了;
3)、可以有不同的访问修饰符;
4)、可以抛出不同的异常;
对比总结:
override(重写):
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。
overload(重载):
1、参数类型、个数、顺序至少有一个不相同。
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。
以上是关于重载与重写的主要内容,如果未能解决你的问题,请参考以下文章