首页 > 其他 > 详细

多态的深层次理解-多态的两个最直接的体现:方法重写和方法重载

时间:2020-08-25 11:25:31      阅读:78      评论:0      收藏:0      [点我收藏+]

》多态其实就是多种形态,多种形式:
》两个最直接的体现
方法重写
方法重载

 重载是静多态,重写是动多态

多态的含义:

多态是指同一个方法的调用,由于对象的不同可能会有不同的行为。上述是一般对于多态的定义,实际上由于函数入口参数的不同也能构成多态,不过此处与前者定义不同之处在于不再强调对象不同。

两种不同时期的多态:

  • 编译时期多态:其又被称为静态多态,编译时期的多态是靠重载实现的,根据参数个数,类型和顺序决定的(必须在同一个类中
  • 运行时的多态:运行时期的多态是靠方法的重写实现的,在编译期间被视作相同方法,但是运行期间根据对象的不同调用不同的方法

对于重载而言,在方法调用之前,编译器就已经确定了所要调用的方法,这称为“早绑定”或“静态绑定” ;

对于重写,只有等到方法调用的那一刻, 解释运行器才会确定所要调用的具体方法,这称为“晚绑定”或“动态绑定” 。

 

多态的作用:消除类型之间的耦合关系。

抽象类和接口都是为多态服务的

 

                重载overload和重写override的区别
                位置                    方法名    参数列表    返回值        访问修饰符
    方法重载    同一个类                相同    必须不同    无关        无关
    方法重写    子类中重写父类方法        相同    必须相同    必须相同    不能比父类更严格
    

 

总结一下,方法的重载:

1.发生在同一个类中

2.方法名相同

3.参数列表不同(参数的类型,个数,顺序不同)

4.和返回值类型无关

5.和方法的修饰符列表无关

注:判断是否为重载,跟方法的权限修饰符、返回值类型、形参变量名、方法体都没有关系!

 

方法重写的规则
l 在继承关系的子类中
l 重写的方法名、参数、返回值类型必须与父类相同
私有方法不能继承因而也无法重写

多态说的就是“同样的一个名字指代多个东西”。编写时来看,重载当然算多态。这里的“名字”是方法名,“东西”是重载版本。
但是选哪个重载版本在编译时就定了,运行时是根据唯一的方法签名去调用,而不像虚方法那样要先查表。这里的“名字”是方法签名。所以根本没有“同样的一个名字”,自然不是多态。
所以就看你把不把前一种多态(静态多态)也算进java语境下的多态里。

多态的深层次理解-多态的两个最直接的体现:方法重写和方法重载

原文:https://www.cnblogs.com/longmo666/p/13558328.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!