什么是多态性?

多态性是多种表现形式,具体来说,可以用“一个外部接口,多个内部实现方法”来表示。例如,计算机中的堆栈可以存储各种格式的数据,包括整数、浮点或字符。无论存储哪种数据,栈的算法实现都是一样的。对于不同的数据类型,程序员不必手动选择,只需使用统一的接口名称,系统可以自动选择。

多态性还可以分为静态多态性和动态多态性。静态多态是指在类或函数中定义的同名函数。它们根据参数表(类型和数量)区分语义,通过静态绑定实现,例如在一个类中定义不同参数的构造函数。动态多态是指在一个类层次结构的不同类中定义的重载函数,这些重载函数一般具有相同的功能,所以语义要根据指针指向的对象的类来区分,通过动态绑定来实现。

“多态性”一词最早用于生物学,指同一种族的生物具有相同的特征。在面向对象理论中,多态被定义为:相同的操作作用于不同类的实例,会产生不同的执行结果,即不同类的对象接收到相同的消息时,会得到不同的结果。多态性包括编译时多态性和运行时多态性。

动态多态是指当不同类型的对象接收到相同的消息时,可能会导致完全不同的行为。也就是说,一个类的成员函数的行为可以根据调用它的对象的类型自动调整,而不需要用户的任何干预,调整发生在程序运行的时候。多态性是面向对象程序设计的重要特征之一。是继“继承”之后,扩展性的又一重要表现。

例如:

你和你的朋友都是烟民,

有一天,你没有烟,你的朋友有n种烟。

你说,抽根烟,

朋友送你一个;

你穿过香烟的过滤嘴,品尝着白沙香烟的味道。

你想要另一个,

这次是芙蓉王,

再来一杯,

这次是熊猫。

...

以上描述是多态!

烟a =白沙

烟b =芙蓉王

烟c =熊猫

但是发现仅仅通过“smoke”基类并没有对不同的具体类对象的引用。

它允许你调用不同的对象,这就是多态性。

当烟进到嘴里的时候【你还没搞清楚是哪种烟】,仅仅通过“抽”这个动作就能识别出是哪种烟的物体

这就是多态悬浮机。

多态性必须具有:

1.基类和各种子类

2.基类引用,指向实例化的子类对象。

再举一只鸡的例子,

鸡是其他所有鸡的基类,定义了一个方法shape(),可以表示鸡的形状。所有亚纲[火鸡、雉鸡、青蛙等。]有此形法,以表明自己的形。

如果我用下面的方式定义我需要一只特定的鸡,

[基类引用=实现该类的对象]

例如:

鸡a =新火鸡();

鸡a =新蛙();

鸡a =新山鸡();

鸡a =新母鸡();

当我用它的时候,我用引号a,

A.shape(),你会得到一只鸡的形状。

如果我定义的是

鸡a =新火鸡();

然后a.shape得到一个火鸡的形状,没有使用具体的。

火鸡a =新火鸡();然后通过a.shape得到火鸡的形状