【问题标题】:Trouble understanding inheritance and implementing it in classes难以理解继承并在类中实现它
【发布时间】:2018-10-22 06:43:48
【问题描述】:

我无法理解继承和在类中实现它。我正在尝试创建一个以 Reptile 类为基础的程序。

使用以下数据执行此操作的最佳方法是什么?

还有一个菜单类,使用我认为应该是一个开关盒来选择所需的爬行动物并显示信息。

提前感谢您的帮助。

【问题讨论】:

  • 基于该数据,最好的方法是不继承。
  • 如果您是之前发布有关汽车的同一个人,这似乎遇到了同样的问题:您的数据在所有情况下都是相同的 - 通过能够将其表示为这样的图表在所有条目的所有字段都填写的情况下,它表明数据可以以相同的方式表示。
  • 如果您需要一个受益于继承的事物的示例,请考虑将“Vehicle”作为您的基类。然后想想不同种类的交通工具:汽车、火车、飞机、直升机、自行车、轮船。
  • @Zohar 如果是这样的话,讲师也许应该提供更好的真实示例。期望学生在不能从中受益的情况下找到继承的用途似乎有点适得其反。不过,我想,没有多少人能做到这一点。为您的回答 +1 :)
  • @John 好吧,我怀疑这是渐进式的事情之一 - 首先您学习继承的概念(派生类是其基类的特定类型这一事实),然后您了解什么这很适合。我个人同意你的看法——我认为这是一种糟糕的教学方式,但是嘿,我不是编写教学大纲的人......

标签: c# inheritance polymorphism


【解决方案1】:

好的,所以我知道这是某种家庭作业,因为在现实世界中您根本不会使用继承。

使用您发布的图片,让我尝试用最简单的术语解释继承。

您可以为所有爬行动物考虑一个基类 - 我们称之为Reptile
本课程包含所有爬行动物共有的所有不同方面——比如喜欢的食物、喂食时间、食物重量比等。
所有这些方面都可以编码为Reptile 类的属性。

请注意,在现实世界中,SpeciesReptileType 也是 Reptile 类的属性,在这种情况下使用 if 继承完全是多余的 - 但话又说回来,我们不是在谈论现实世界的应用程序 - 所以:

SnakeReptile 的特定类型。 LizardReptile 的另一种特定类型 - 所以让我们为这两种类型创建类。 到目前为止,我们有 ReptileSnakeLizard 类,其中最后两个继承了第一个。
继续前进,CobraSnake 的特定类型,Rattlesnake 也是。所以让我们为它们创建继承自Snake 的类。同样,BeardedLizardLizard 的特定类型,Chameleon 也是如此 - 所以这里还有另外两个要创建的类。

所以基本上,我认为您的老师希望看到以下内容:

class Reptile {/* implementation here */}
    class Snake : Reptile {/* implementation here */}
        class Cobra : Snake {/* implementation here */}
        class Rattlesnake: Snake {/* implementation here */}
    class Lizard: Reptile {/* implementation here */}
        class BeardedLizard : Lizard {/* implementation here */}
        class Chameleon : Lizard {/* implementation here */}

现在,在这种情况下继承没有意义的原因是,Snake 不会向Reptile 添加任何新功能,Chameleon 也不会向Lizard 添加任何新功能。为了使继承有意义,您需要在派生类型中添加新功能,这些功能特定于该类(及其继承者),并且不与基类或该类的任何其他继承链共享。

例如,所有的蛇都在爬行,而所有的蜥蜴都在行走。如果你在哪里添加一个Crawl() 方法到Snake 类和一个Walk() 方法到Lizard 类 - 比继承SnakeLizard 类继承Reptile 更有意义类。

【讨论】:

    猜你喜欢
    • 2019-09-03
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 2021-11-25
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多