【问题标题】:Polymorphism and Inheritance definitions in C#C# 中的多态性和继承定义
【发布时间】:2017-08-17 09:50:38
【问题描述】:

我正在尝试了解 OOP 的主要支柱。 当我阅读 Microsoft 文档中的继承定义时。有这部分:

继承使您能够创建新的类来重用、扩展和修改在其他类中定义的行为。

发件人:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/inheritance

这一切我都很清楚,但是, 我的问题是:这个定义的一部分不是:“修改其他类中定义的行为”,已经是多态了吗?

因为多态基本上是说在同一个方法调用上改变派生类的行为。换句话说,当您调用方法 Speak(),并且您从 Animal 基类派生了 Dog 和 Cat 类时,这两个派生类将对重写的 Speak() 方法执行不同的操作。

感谢您的回答。 :)

【问题讨论】:

标签: c# class oop inheritance polymorphism


【解决方案1】:

你的想法是正确的。继承和多态是齐头并进的,但它们不是一回事。多态性可能是继承的结果,但并非总是如此,一个可以没有另一个而存在。

在定义中,“...修改在其他类中定义的行为”。在我看来,是指可以是静态(重载)或动态(覆盖)的多态性。您给出的有关 Speak() 方法的示例是动态多态性。您可以在 Animal 类中将 Speak() 方法声明为虚拟或抽象(这将使整个类抽象),并使用“override”关键字在 Cat 和 Dog 子类中覆盖它,从而改变 Speak() 行为在Animal中定义,这就是定义所说的。 检查此链接:https://www.tutorialspoint.com/csharp/csharp_polymorphism.htm

【讨论】:

  • 现在我更清楚了:),但我不明白一件事,正如你提到的多态和继承是两件不同的事情,我同意这一点,但我不确定,是那个部分:“一个可以没有另一个存在”,继承肯定(只是没有被覆盖的基本方法),但是没有继承怎么能存在多态呢?,只有当我们考虑静态多态时,我才想到你提到的,但是没有继承就不可能实现动态多态,还是我错了?
  • 多态作为 OOP 的概念非常广泛,不仅限于这两种,在此处查看其他类型:en.wikipedia.org/wiki/Polymorphism_(computer_science)。但你是对的,这种类型的多态性(覆盖)确实需要 C# 中的继承。但一般来说,多态性在没有继承的情况下是可能的,例如在其他语言中,例如 python:dzone.com/articles/polymorphism-and-inheritance
猜你喜欢
  • 2015-10-26
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多