行为的默认实现

本文关键字:实现 默认 | 更新日期: 2023-09-27 17:56:51

>场景

有三种类型的车辆

  1. 在陆地上移动的车辆。
  2. 在水上移动的车辆。
  3. 在空中移动的车辆。

所有类型的车辆都有一个共同的行为,都可以移动。但是它们的移动方式完全不同(车辆移动的媒介)。

这意味着,所有车辆都有共同的行为(Move)但完全独特的实现。

问题1

在这种情况下,我们可以有一个带有虚拟函数 (Move) 的基类和一些默认实现吗,因为所有车辆都有完全不同的实现?

抽象类会是这种设计的好方法吗,因为我们没有任何默认实现?

问题2

当我们没有默认实现时,我们应该使用抽象方法吗?(只是为了确认其他情况)

行为的默认实现

有点模糊的问题,我想你可能在做功课。

首先,虚拟方法将允许您编写一些默认行为,所有子类都将继承这些行为,但可以选择用自己的子类替换。

基本上,你需要问问自己,是否有任何共同的行为,作为公共接口的

附加?

想想音乐播放器。界面是什么?让我们停止,快进,快退和播放。

这是接口的一个很好的例子。所有默认的"行为"都由方法的名称描述。

CD播放器的"播放

"方式与MP3播放器的"播放"方式完全不同。以上是抽象方法的示例。

如果这是你所有必需的行为,你不需要抽象类,你需要一个接口。

但是,现在考虑一个倒回到开头并播放的按钮。这是虚拟方法的一个很好的例子,你需要一个抽象类来实现它。您可以根据已经编写的抽象方法提供默认实现,它将正常工作(忽略检测轨道;)的开头)。此外,子类能够根据需要覆盖行为。

回答您的问题:

问题1:我会说不;Move 应该是抽象的,因为没有默认实现(尽管默认隐含行为)

问题 2:是的,如果您没有默认实现,请使用抽象。虽然,如果你发现你的类完全由抽象方法组成,问问自己,你是否最好定义一个接口。

问题 1

是的,抽象类将是这种设计的好方法,因为我们没有任何默认实现?

问题2

是的,当我们没有默认实现时,我们使用抽象方法。

由于你没有任何Vehicle不是LandWaterAir,你可能想要一个abstract类。

方法也一样:如果实现总是不同的(即你总是必须重新定义实现),abstract就可以了。

如果没有共享实现,则接口将完成这项工作。