多态

多态
Java支持两种类型的多态性:运行时的多态性和编译时的多态性。
编译时的多态性:Java中的静态多态性,通过重载函数来实现。
A、方法的重载:在同一个类中,相同的方法名通过对应不同的方法来实现,但是方法的参数不同。
B、成员的覆盖:在不同类中(父类和子类),允许有相同的变量名,但是数据类型不同或数值不同;也允许有相同的方法名,对应的方法实现不同。
1、普通方法的重载
在同一个类中,当方法名相同,至少以下有一条符合,才是重载:
A、参数个数不同;
B、对应位置上的参数类型不同;
PS:不允许参数相同而只是返回值类型不同的情况。
权限修饰符以及final修饰符对重载没有影响。
2、构造方法的重载
构造方法不能是static和final类型,而且没有返回值类型。
规则和普通方法重载相同。
3、重载的解析
编译器的解析步骤按照下面的顺序进行:
A、根据调用的方法名,查找是否有定义好的方法名,若没有,则报错。
B、比较形参和实参的数目是否相等,如果没有,则报错。如果一个或多个方法符合条件,进入候选集。
C、与候选集中的方法比较参数表,如果对应位置上的每个参数类型完全匹配,或者可以通过扩展转换相匹配,则该方法称之为可行方法,并入可行集。若不存在可行方法,则报错。
D、在可行集中按照一定规则选择最佳可行方法。若最佳可行方法为0,则报错。
以下是最佳可行方法选取原则:
1、若每一个参数都可以完全匹配,它就是最佳匹配方法。
2、若某一方法的每一个参数匹配的不必别的方法差,且至少有一个参数比别的方法好,则它就是最佳方法。
好与差的比较是:完全匹配要比扩展转换好。
PS:同样是扩展比较,也有好差之分。
转换路径有两条:
Byte→short→int→long→float→double
char→int→long→float→double
位于左边的类型可以扩展成右边的类型。源类型与目的类型越近,这种转换就越好。
4、重载与覆写的区别
1、重载与覆写的方法名称完全相同,但是重载的参数列表不同,而覆写则要求参数列表完全相同。
2、重载对权限修饰符没有限制,覆写对权限修饰符有限制。
3、同一类中,只能重载而不能覆写;而子类对父类方法既可以重载也可以覆盖。
4、重载时,编译器在编译期间就可以确定调用哪一个方法,而覆盖则有可能在运行期间才能确定。

运行时的多态性:没写完

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值