什么是多态性?它的用途是什么?
#1楼
通常,这指的是类型A的对象的行为类似于类型B的对象的能力。在面向对象的编程中,这通常是通过继承来实现的。 一些维基百科链接以了解更多信息:
编辑:修复断开的链接。
#2楼
多态是一种将对象类视为父类的能力。
例如,假设有一个叫Animal的类,还有一个叫Dog的类,它是从Animal继承的。 多态是将任何Dog对象都视为Animal对象的能力,如下所示:
Dog* dog = new Dog;
Animal* animal = dog;
#3楼
让我们用一个比喻。 对于给定的音乐剧本,每位演奏该曲的音乐家都会在演绎中赋予自己的风格。
音乐家可以通过界面进行抽象,音乐家所属的流派可以是一个抽象类,它定义了一些全球性的解释规则,并且每个演奏者都可以通过一个具体的类来建模。
如果您是音乐作品的听众,那么您可以参考剧本,例如巴赫(Bach)的“富加和托卡塔(Fuga and Tocata)”,每个演奏该剧本的音乐家都以自己的方式进行多态操作。
这只是一个可能的设计示例(使用Java):
public interface Musician {
public void play(Work work);
}
public interface Work {
public String getScript();
}
public class FugaAndToccata implements Work {
public String getScript() {
return Bach.getFugaAndToccataScript();
}
}
public class AnnHalloway implements Musician {
public void play(Work work) {
// plays in her own style, strict, disciplined
String script = work.getScript()
}
}
public class VictorBorga implements Musician {
public void play(Work work) {
// goofing while playing with superb style
String script = work.getScript()
}
}
public class Listener {
public void main(String[] args) {
Musician musician;
if (args!=null && args.length > 0 && args[0].equals("C")) {
musician = new AnnHalloway();
} else {
musician = new TerryGilliam();
}
musician.play(new FugaAndToccata());
}
#4楼
在面向对象的语言中,多态性允许通过同一接口处理和处理不同的数据类型。 例如,考虑C ++中的继承:类B派生自类A。类型A *的指针(类A的指针)可用于处理类A的对象和类B的对象。
#5楼
如果您考虑该术语的希腊语根源,应该会很明显。
- 聚=许多:多边形=多面,聚苯乙烯=许多苯乙烯(a) ,多色=许多语言,依此类推。
- 形态=变化或形式:形态=对生物形式的研究,Morpheus =能够采取任何形式的希腊梦之神。
因此,多态性是(在编程中)针对不同底层形式(数据类型)呈现相同接口的能力。
例如,在许多语言中,整数和浮点数都是隐式多态的,因为您可以加,减,乘等等,而与类型不同的事实无关。 通常,它们很少被视为对象。
但是,以同样的方式,即使BigDecimal
或Rational
或Imaginary
类的类也可以提供这些操作,即使它们对不同的数据类型进行操作也是如此。
经典示例是Shape
类以及可以从中继承的所有类(正方形,圆形,十二面体,不规则多边形,splat等)。
使用多态性,这些类中的每一个将具有不同的基础数据。 点形状仅需要两个坐标(假设它在二维空间中)。 圆需要一个中心和半径。 正方形或矩形需要两个坐标作为左上角和右下角以及(可能)旋转的坐标。 不规则多边形需要一系列线。
通过使类负责其代码及其数据,可以实现多态。 在此示例中,每个类都有其自己的Draw()
函数,并且客户端代码可以简单地执行以下操作:
shape.Draw()
以获得任何形状的正确行为。
这与旧的工作方式相反,在旧的工作方式中,代码与数据是分开的,您将拥有诸如drawSquare()
和drawCircle()
。
面向对象,多态性和继承都是紧密相关的概念,了解它们至关重要。 在我漫长的职业生涯中,有很多“银子弹”基本上都被淘汰了,但是面向对象范例已经证明是一个不错的选择。 学习,理解,喜欢它-您会很高兴的:-)
(a)我最初是作为一个玩笑而写的,但事实证明这是正确的,因此并不那么有趣。 单体苯乙烯恰好由碳和氢C 8 H 8
制成,而聚苯乙烯则由(C 8 H 8 ) n
基团制成。
也许我应该说息肉是字母p
多次出现,尽管现在我不得不解释这个笑话,即使那似乎也不是很有趣。
有时,您应该在落后的时候退出:-)
来源:oschina
链接:https://my.oschina.net/stackoom/blog/3156281