如果你想到这个词的希腊语根源,它应该变得明显。
> Poly = many:polygon = many-sided,polystyrene = many styrenes(a),polyglot = many languages等等。
>变形=变化或形式:形态=生物形式的研究,Morpheus =梦想的希腊神能够采取任何形式。
因此,多态性是(在编程中)为不同的底层形式(数据类型)呈现相同接口的能力。
例如,整数和浮点数是隐式多态的,因为你可以加,减,乘等等,而不管类型是不同的事实。它们在通常的术语中很少被视为对象。
但是,以同样的方式,类BigDecimal或Rational或Imaginary也可以提供这些操作,即使它们操作不同的数据类型。
经典的例子是Shape类和所有可以从它继承的类(正方形,圆形,十二面体,不规则多边形,splat等等)。
使用多态性,这些类中的每一个都将具有不同的底层数据。点形状只需要两个坐标(假设它在二维空间中)。圆需要一个中心和半径。正方形或矩形需要两个坐标作为左上角和右下角以及(可能)旋转。不规则多边形需要一系列线。
通过使类负责其代码及其数据,可以实现多态性。在这个例子中,每个类都有自己的Draw()函数,客户端代码可以:
shape.Draw()
以获得任何形状的正确行为。
这与旧的代码与数据分离的方式形成对比,你会有像drawSquare()和drawCircle()这样的函数。
对象定向,多态性和继承都是密切相关的概念,它们对知道至关重要。在我漫长的职业生涯中,有许多“银子弹”,基本上只是疯狂出来,但OO范式已经证明是一个好的。学习它,理解它,爱它 – 你会很高兴你做:-)
(a)我原本写这是一个笑话,但结果是正确的,因此,不是那么有趣。单体苯乙烯恰好由碳和氢(C 8 H 8)制成,聚苯乙烯由(C 8 H 8)n的组制成。
也许我应该说,息肉是许多出现的字母p虽然,现在我不得不解释这个笑话,即使这似乎也不是很有趣。
有时,你应该退出,而你在后面:-)