【发布时间】:2018-03-29 12:09:59
【问题描述】:
我正在努力为我遇到的问题建模,为简单起见,我已将其转换为 Birds 示例:
假设我们有鸟,有些可以飞,有些不能,但是,它们都有翅膀,所有会飞的鸟的飞行方式完全相同。
我的问题是什么更适合飞行能力?通常,能力是使用接口来表示的,但这需要我在每个 Bird 中实现 Fly 方法,尽管它们以相同的方式飞行。
另一个问题是,一只鸟需要翅膀才能飞翔,什么可以代表“Need-A”关系?从 Bird 类的角度来看,这将是一个“Has-A”关系,但从代表飞行能力的模块来看,这将是一个“Need-A”关系。
这是我当前的类图。
为了解决上面的一些问题,我将Bird转换为CanFlyBird继承的抽象类。 这是正确的方法吗?
因为我似乎还需要弄清楚如何将鸟之翼类默认传递给飞行方法。
【问题讨论】:
-
我也会将 CanFlyBird 类抽象化。
-
你可以将fly方法作为虚拟方法,所以如果somone想覆盖它,该类可以覆盖else使用基本版本
-
@OnyxCaldin - 抽象类会产生问题,因为 fly 方法需要是抽象的,并且所有子类都必须强制实现它...最好将 fly 作为虚拟方法来解决问题想要覆盖它
-
@PranayRana 为什么 fly 方法需要是抽象的?我不明白。
-
@PranayRana 抽象类可以在其中完全实现虚拟方法。使它抽象的原因是你不能创建它的实例。
标签: c# oop interface abstract-class