多态性和泛化有什么区别。我看到它们在 UML 中看起来很相似。他们一样吗?
2 回答
让我们看一下牛津词典:
概括 | ˌjen(ə)rələˈzāSH(ə)n |
名词
从具体案例推论得出的一般性陈述或概念:他正在做出全面的概括。
• 概括的作用:这些轶事不能作为概括的基础。
UML 有一个图形表示,它是一条朝向一般类的开放三角形的单线。
多态性 | ˌpälēˈmôrfizəm |
名词
以几种不同形式发生的条件:人类认知的复杂性和多态性。
[...]
•计算允许例程在不同时间使用不同类型变量的编程语言的一项功能。
这是对泛化的某种使用。例如,如果您有一个Animal
具有操作的抽象类,sound()
并且您具有该类的不同特化(与泛化相反)(例如具体类Cat
和Dog
),那么您可以Animal
通过调用来处理多态sound()
。如果你有Cat
它会喵喵叫,Dog
它会吠叫。
我假设您的问题涉及面向对象编程的泛化和多态性,例如 Java。
泛化是指一个类可以分解行为并且子类可以从这些行为中受益。超类概括了这些行为,相反,子类专门化了这些行为。
由于一个对象可以被看作是通用类或特殊类(通过强制转换这个对象),我们说这个对象是多态的。在运行时,多态性会影响方法调用的选择:如果两个超类和专用类都有相同方法的两个实现,则程序应该在这两个实现之间进行选择。
因此,多态性更多地与在运行时我们必须选择对象的性质有关,而泛化更多地与行为的继承和分解的概念有关。
您可以查看这些讲义以获得更多解释和示例。