1

多态性和泛化有什么区别。我看到它们在 UML 中看起来很相似。他们一样吗?

4

2 回答 2

4

让我们看一下牛津词典:

概括 | ˌjen(ə)rələˈzāSH(ə)n |

名词

从具体案例推论得出的一般性陈述或概念:他正在做出全面的概括。

• 概括的作用:这些轶事不能作为概括的基础。

UML 有一个图形表示,它是一条朝向一般类的开放三角形的单线。

多态性 | ˌpälēˈmôrfizəm |

名词

以几种不同形式发生的条件:人类认知的复杂性和多态性。

[...]

计算允许例程在不同时间使用不同类型变量的编程语言的一项功能。

这是对泛化的某种使用。例如,如果您有一个Animal具有操作的抽象类,sound()并且您具有该类的不同特化(与泛化相反)(例如具体类CatDog),那么您可以Animal通过调用来处理多态sound()。如果你有Cat它会喵喵叫,Dog它会吠叫。

于 2018-07-19T14:27:44.370 回答
2

我假设您的问题涉及面向对象编程的泛化和多态性,例如 Java。

泛化是指一个类可以分解行为并且子类可以从这些行为中受益。超类概括了这些行为,相反,子类专门化了这些行为。

由于一个对象可以被看作是通用类或特殊类(通过强制转换这个对象),我们说这个对象是多态的。在运行时,多态性会影响方法调用的选择:如果两个超类和专用类都有相同方法的两个实现,则程序应该在这两个实现之间进行选择。

因此,多态性更多地与在运行时我们必须选择对象的性质有关,而泛化更多地与行为的继承和分解的概念有关。

您可以查看这些讲义以获得更多解释和示例。

于 2019-09-15T09:07:38.640 回答