1.重写和重载分别是什么意思
重写(Override):
重写是子类重新定义了父类的同名同参方法,覆盖了父类的方法,因此,我们也把这种方式叫做“覆写”。
重载(Overload):
重载是同一个类中,声明的方法名字相同,但是参数不同的个方法,通过调用时传不同的参数来达到调用名字相同但是方法不同的目的。
2.注意事项
是否可以在方法名字、参数个数、参数类型、参数顺序都相同的时候通过方法的返回值不同来重载方法?
不能,因为java通过方法签名来重载方法,而方法的返回值并不是方法签名的一部分。举个简单的例子我们定义了如下两个方法:
public int fun(int a){}
public boolean fun(int a){}
现在这两个方法的方法名字、参数个数、参数类型、参数顺序都相同,只是一个返回值是int型,另一个是boolean型。假如能通过这种方式重载的话,那么当我们调用这两个方法时根本不接收它们的返回值,那么java该怎么区分我们调用的是哪个方法呢?显然就没有办法了,所以这么一推导,通过反证法我们得出了不能通过方法的返回值不同来重载方法的结论
被子类重写的父类方法不能是private的,否则相当于在子类中重新定义了一个新的同名方法
重写的方法使用throws抛出的异常必须和被重写的方法所抛出的异常一致,或者抛出是被重写方法的异常的子类异常
这个的解释下面的链接说的很好:
https://zhidao.baidu.com/question/1987876558668853147.html
简单的说就是子类虽然继承了父类,拓展了父类的功能,但是做的事不能超出父类的限制,连抛出的异常也是这样。
重写的方法的返回值必须和被重写的方法的返回值一致
可以通过使方法的参数顺序不同进行重载
但是这样的话,几个参数的类型必须不一样,例如,我们可以把fun(float,int)这样的方法重载成fun(int,float),但是没法把fun(int,int)方法进行重载,因为两个int参数无论怎么交换顺序都是两个int型的参数。