
多态性就是多种表现形式,具体来说,可以用"一个对外接口,多个内在实现方法"表示。举一个例子,计算机中的堆栈可以存储各种格式的数据,包括整型,浮点或字符。不管存储的是何种数据,堆栈的算法实现是一样的。针对不同的数据类型,编程人员不必手工选择,只需使用统一接口名,系统可自动选择。
多态性也分静态多态性和动态多态性两种。静态多态性是指定义在一个类或一个函数中的同名函数,它们根据参数表(类型以及个数)区别语义,并通过静态联编实现,例如,在一个类中定义的不同参数的构造函数。动态多态性是指定义在一个类层次的不同类中的重载函数,它们一般具有相同的函数,因此要根据指针指向的对象所在类来区别语义,它通过动态联编实现。
“多态性”一词最早用于生物学,指同一种族的生物体具有相同的特性。在面向对象理论中,多态性的定义是:同一 *** 作作用于不同的类的实例,将产生不同的执行结果,即不同类的对象收到相同的消息时,得到不同的结果。多态性包含编译时的多态性、运行时的多态性两大类。
动态多态是指发出同样的消息被不同类型的对象接收时,有可能导致完全不同的行为。即,在用户不作任何干预的环境下,类的成员函数的行为能根据调用它的对象类型自动作出适应性调整,而且调整是发生在程序运行时。 多态是面向对象程序设计的重要特征之一。是扩展性在“继承”之后的又一重大表现 。
比方一下:
你和你朋友都是烟鬼,
某日,你没有带烟, 而你朋友有n种烟,
你说: 来根烟,
朋友给你一根;
你通过烟的过滤嘴, 品出为白沙烟
你再要一根,
品出这次是芙蓉王,
再要一根,
品出这次是熊猫
上面描述的就是多态!
烟 a = 白沙
烟 b = 芙蓉王
烟 c = 熊猫
但发现没有, 仅仅通过"烟"基类, 引用到不同的具体类对象,
就能让你调用到不同的对象, 这就是多态
而烟到你嘴里[此时你还没有发现是那种烟], 你仅仅凭借"吸"的动作,就识别出来,到底是哪种烟对象
这就是多态的悬机
多态须具备:
1 基类 和各个子类
2 基类 引用, 指向实例化的子类对象
再举一个鸡的例子,
鸡是所有其它鸡的基类, 定义了一个方法shape(), 此方法能指明鸡的形态 所有的子类[火鸡,山鸡,田鸡等],都有这个shape方法, 表明自己的形态,
如果用下面的方法定义我需要具体的鸡,
[基类 引用 = 实现类的对象]
for example:
鸡 a = new 火鸡();
鸡 a = new 田鸡();
鸡 a = new 山鸡();
鸡 a = new 母鸡();
当我使用的时候, 我采用 a 这个引用,
ashape(), 就会得到鸡的形态
如果我定义的是
鸡 a = new 火鸡();
那么ashape得到的是火鸡的形态, 而不需要用具体的
火鸡 a = new 火鸡(); 再通过ashape得到火鸡的形态
多态,顾名思义就是具有很多种形态,你可以联想到一种物质有很多种状态、形态,例如水,有气态、液态、固态,然后回归到编程,假如我们需要编程来实现对水的质量进行计算,在假设质量=密度体积。可是怎么样才能把所有形态、状态的水都能计算出来,这是就要分不同种情况了,假设是气态,这样就跟压强(假设的)有关系了,所以成员方法参数为压强、体积、密度。而液态的就有可能跟温度(假设的)关系比较大,所以成员方法中的参数为温度、体积、密度。而固态跟温度和压强(假设的啦)关系不大,那么成员方法的参数为体积、密度。这样计算水的质量就有3种计算公式了,虽然是不同的3条公式,但是他们殊途同归,最后都是求质量。
综上,多态就是为了解决同一问题的不同解决方式。使用前提就是一个对象(类)有多种情况,然后分情况进行解决。
多态就是指一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。
因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。
扩展资料:
特点:
指向子类的父类引用由于向上转型了,它只能访问父类中拥有的方法和属性,而对于子类中存在而父类中不存在的方法,该引用是不能使用的,尽管是重载该方法。
若子类重写了父类中的某些方法,在调用该些方法的时候,必定是使用子类中定义的这些方法(动态连接、动态调用)。
参考资料来源:百度百科-多态
以上就是关于什么是多态性全部的内容,包括:什么是多态性、在java中什么是多态。。 什么时候用多态、java 中实现多态的机制是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)