我也同意adamalex 的响应,即接口应该由应该响应某些方法的类共享。
如果类具有相似的功能,但在祖先关系中彼此不直接相关,那么接口将是将该功能添加到类而不在两者之间复制功能的好方法。(或者有多个实现,只有细微的差别。)
当我们使用汽车类比时,一个具体的例子。假设我们有以下类:
Car -> Ford -> Escape -> EscapeHybrid
Car -> Toyota -> Corolla -> CorollaHybrid
汽车有wheels
和可以Drive()
和Steer()
。所以这些方法应该存在于Car
类中。(可能Car
该类将是一个抽象类。)
Ford
往下走,我们得到了和之间的区别Toyota
(可能实现为汽车上标志类型的差异,同样可能是一个抽象类。)
然后,最后我们有一个Escape
和Corolla
类,它们是完全实现为汽车的类。
现在,我们如何制造混合动力汽车?
我们可以有一个Escape
that is的子类,EscapeHybrid
它添加一个FordsHybridDrive()
方法,而它的一个子类Corolla
是CorollaHybrid
withToyotasHybridDrive()
方法。这些方法基本上都在做同样的事情,但是我们有不同的方法。呸。似乎我们可以做得更好。
假设一个混合有一个HybridDrive()
方法。由于我们不想最终拥有两种不同类型的混合体(在一个完美的世界中),所以我们可以制作一个IHybrid
具有HybridDrive()
方法的接口。
所以,如果我们想创建一个EscapeHybrid
或CorollaHybrid
类,我们所要做的就是实现IHybrid
接口。
对于一个真实世界的例子,让我们看一下 Java。可以将一个对象与另一个对象进行比较的类实现了该Comparable
接口。顾名思义,接口应该用于可比较的类,因此名称为“Comparable”。
有趣的是, Java 教程的接口课程中使用了一个汽车示例。