【发布时间】:2015-09-16 16:01:39
【问题描述】:
我知道继承意味着“是”关系,它也可以具有多态行为。但是例如,在 Java 中,从父类扩展和实现接口的区别在于,接口只有要实现的方法。它们都需要子类依赖父类和领导类相互耦合。
那么,除了从父类继承外,是否应该尽可能避免实现类的接口?
【问题讨论】:
标签: oop inheritance language-agnostic composition
我知道继承意味着“是”关系,它也可以具有多态行为。但是例如,在 Java 中,从父类扩展和实现接口的区别在于,接口只有要实现的方法。它们都需要子类依赖父类和领导类相互耦合。
那么,除了从父类继承外,是否应该尽可能避免实现类的接口?
【问题讨论】:
标签: oop inheritance language-agnostic composition
“组合优于继承”原则是指您尝试重用代码的情况。
原则上说,通过组合重用代码比通过继承更好。
它不适用于接口,因为接口不实现将被重用的代码(至少,直到 Java 8 :)。
【讨论】:
接口是允许您反转依赖关系的主要机制之一,以便实现可以依赖于抽象而不是相反。因此,如果您遵循 SOLID 原则,则应优先使用接口而不是直接实例化。
与任何其他语言功能一样,它可能会被滥用或过度使用。但是当用于依赖倒置时,它基本上可以通过轻松扩展程序的行为来增强程序的“组合”。
当然,如果您有足够的创造力,您可能会弄清楚如何在不使用接口的情况下进行依赖倒置。没有接口的语言长期以来一直在进行依赖倒置。 stdio/iostream API 就是最好的例子之一。它允许为新的字符设备编写设备驱动程序,而无需重新编译写入标准输出的程序。否则,每次有人提出新的行式打印机、终端或串行调制解调器时,您都必须重新编译操作系统上的几乎所有程序。
【讨论】: