java中方法重写和重载的那些事儿

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型的参数。

不能通过访问权限,返回类型,抛出的异常进行重载
方法的异常类型和数量不会对重载造成影响
如果在继承情况下进行重载,被重载的方法必须不是private修饰的,否则子类只是创建了一个新方法,而不是重载
构造方法可以被重载,但是不能被重写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值