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