继承和接口

这是这个问题的一个后续问题。

假设我有一个继承树,如下所示:

Car -> Ford -> Mustang -> MustangGT

定义每个类的接口是否有好处? 例:

ICar -> IFord -> IMustang -> IMustangGT

我可以看到,也许其他类(如Chevy )想要实现IcarIFord ,甚至IMustang ,但可能不是IMustangGT因为它非常具体。 在这种情况下界面是多余的?

另外,我认为任何希望实现IFord类肯定会想要通过继承Ford来使用它的一个继承,以免重复代码。 如果这是给定的,那么IFord实施IFord什么好处?


根据我的经验,如果有几个类需要响应相同的方法或多个方法,以便可以通过其他代码与这些类的通用接口进行交互使用,则最好使用接口。 接口的最佳用途是协议很重要,但每个类的底层逻辑可能不同。 如果否则会重复逻辑,请考虑抽象类或标准类继承。

针对你的问题的第一部分,我建议不要为你的每个类创建一个接口。 这会不必要地混乱你的班级结构。 如果你发现你需要一个界面,你可以随时添加它。 希望这可以帮助!

亚当


我也同意adamalex的回应,接口应该由应该对特定方法做出响应的类共享。

如果类具有相似的功能,但在祖先关系中彼此之间没有直接关系,那么接口将是将这个功能添加到类中的好方法,而不会在两者之间重复功能。 (或者只有很多实现,只有很细微的差别。)

我们使用汽车比喻,一个具体的例子。 假设我们有以下类:

Car -> Ford   -> Escape  -> EscapeHybrid
Car -> Toyota -> Corolla -> CorollaHybrid

汽车有wheels ,可以Drive()Drive() Steer() 。 所以这些方法应该存在于Car类中。 (可能Car类将是一个抽象类。)

沿着这条路线,我们可以区分FordToyota (可能是因为汽车上的徽章类型不同,也可能是抽象类别)。

然后,最后我们有一个EscapeCorolla课程,这些课程是作为汽车完全实施的。

现在,我们如何制造混合动力车?

我们可以有一个子类, EscapeEscapeHybrid增加了一个FordsHybridDrive()方法,和子类CorollaCorollaHybridToyotasHybridDrive()方法。 方法基本上是做同样的事情,但我们有不同的方法。 呸。 似乎我们可以做得比这更好。

假设混合动力车有一个HybridDrive()方法。 由于我们不想结束两种不同类型的混合动力车(在一个完美的世界中),所以我们可以制造具有HybridDrive()方法的IHybrid接口。

所以, 如果我们想要制作EscapeHybridCorollaHybrid ,我们所要做的就是实现IHybrid接口

对于真实世界的例子,我们来看看Java。 可以将对象与另一个对象进行比较的类实现Comparable接口。 顾名思义,接口应该是一个可比较的类,因此名称为“Comparable”。

就感兴趣的问题而言,Java Tutorial的Interfaces课程中使用了一个汽车示例。


你根本不应该实现任何这些接口。

类继承描述了一个对象是什么 (例如:它的身份)。 这很好,但是大多数情况下,对象所处的位置远不如对象所做的重要。 这是接口进来的地方。

一个接口应该描述一个对象的作用) ,或者它的行为。 通过这个,我的意思是它的行为,以及在给定行为的情况下有意义的一组操作。

因此,好的接口名称通常应该是IDriveableIHasWheels等等。 有时候描述这种行为的最好方法是引用一个众所周知的其他对象,所以你可以说“像其中一个行为”(例如: IList ),但是恕我直言,这种命名形式是少数。

鉴于这种逻辑,接口继承有意义的场景与对象继承有意义的场景完全和完全不同 - 通常这些场景根本不涉及对方。

希望可以帮助您通过您实际需要的接口进行思考:-)

链接地址: http://www.djcxy.com/p/38145.html

上一篇: Inheritance and interfaces

下一篇: How to implement a property in an interface