重载(overload)与覆盖(override)

本文详细阐述了在面向对象编程中重载(overload)与覆盖(override)的区别。重载涉及同一类中方法签名的变化,而覆盖关注于继承结构中方法实现的变更。文章还解释了两者在调用时机、参数匹配、返回类型等方面的不同。
摘要由CSDN通过智能技术生成

“重载(overload)”:  
1、overload时,方法的参数类型、个数至少有一个不相同;  
2、overload不检查:方法的返回类型、方法的访问权限、方法所抛异常

3、两个func完全是不同的函数。只是恰好函数名相同。这两个func在虚函数指针表占用了两个不同的Entry. vtable
     Entry 1: void func(Number)
     Entry 2: void func(String)

4、overload是编译期就决定了调用哪个函数; 
     编译器根据方法参数类型、个数的不同,产生了不同的调用函数地址(不同的Entry)的jvm指令
5、overload存在于父类和子类、同类中。  
 
“覆盖(override)”  
1、override时,方法名、参数必须相同;其中参数相同包括参数的个数,类型  

2、java1.5加入了协变返回类型以后,覆盖方法的返回类型可以是被覆盖方法返回类型的子类型;

     (引用EffectiveJava2中一句话是“永远不要让客户(我的理解:调用方)去做任何类库能够替客户完成的事情。”)
3、子类方法不能缩小父类方法的访问权限;会产生编译器异常
4、子类方法不能抛出比父类方法更多的异常(子类方法可以不抛出异常);会产生编译器异常

5、override是运行时动态决定调用哪个method。所以也叫做多态性;
6、override存在于父类和子类之间。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值