什么是多态性,它的用途是什么,它是如何使用的?
如果您考虑该术语的希腊词根,它应该变得显而易见。
因此,多态性是(在编程中)为不同的底层形式(数据类型)呈现相同接口的能力。
例如,在许多语言中,整数和浮点数是隐式多态的,因为您可以加、减、乘等,而不管类型是否不同。通常,它们很少被视为对象。
但是,以同样的方式,类似BigDecimalor的类Rational也Imaginary可以提供这些操作,即使它们对不同的数据类型进行操作。
BigDecimal
Rational
Imaginary
经典的例子是Shape类和所有可以从它继承的类(正方形、圆形、十二面体、不规则多边形、splat 等)。
Shape
使用多态性,这些类中的每一个都将具有不同的基础数据。一个点形状只需要两个坐标(当然假设它在二维空间中)。圆需要一个圆心和一个半径。正方形或矩形需要左上角和右下角的两个坐标以及(可能)旋转。一个不规则的多边形需要一系列的线。
通过让类对其代码和数据负责,您可以实现多态性。在这个例子中,每个类都有自己的Draw()函数,客户端代码可以简单地做:
Draw()
shape.Draw()
获得任何形状的正确行为。
这与代码与数据分离的旧方式形成鲜明对比,您将拥有诸如drawSquare()and之类的函数drawCircle()。
drawSquare()
drawCircle()
面向对象、多态性和继承都是密切相关的概念,了解它们至关重要。在我漫长的职业生涯中,有许多“灵丹妙药”基本上都以失败告终,但 OO 范式被证明是一个很好的范式。学习它,理解它,爱它——你会很高兴你做到了:-)
(a)我最初是把它写成一个玩笑,但结果证明它是正确的,因此并不那么好笑。单体苯乙烯恰好是由碳和氢制成的,而聚苯乙烯是由它们的基团制成的。C8H8``(C8H8)n
C8H8``(C8H8)n
也许我应该说息肉是这封信的多次出现,p尽管现在我不得不解释这个笑话,即使这看起来也不好笑。
p
有时,您应该在落后时退出:-)