"组合超过继承"也意味着"构图超过界面"?

时间:2015-06-30 02:05:04

标签: oop inheritance language-agnostic composition

我知道继承意味着"是一个"关系,它也可以有多态行为。但是,例如,在Java中,从父类扩展和实现接口之间的区别在于接口只具有要实现的方法。他们都需要子类依赖于父类和引导类来相互耦合。 那么,除了从父类扩展外,是否应该尽可能避免实现类的接口?

2 个答案:

答案 0 :(得分:0)

"构成而不是继承"原则是指您尝试重用代码的情况。

该原则表明,通过合成而不是继承来重用代码会更好。

它不适用于接口,因为接口不实现将被重用的代码(至少,直到Java 8 :)。

答案 1 :(得分:0)

接口是允许您反转依赖性的主要机制之一,因此实现可以依赖于抽象而不是相反。因此,如果遵循SOLID原则,接口应优先于直接实例化。

与任何其他语言功能一样,它可能被滥用或过度使用。但是当用于依赖性反转时,它基本上可以增强你的程序"组合"通过简化程序的行为来轻松扩展。

当然,如果你有足够的创造力,你可以在不使用界面的情况下弄清楚如何进行依赖倒置。没有接口的语言长期以来一直在进行依赖倒置。 stdio / iostream API就是最好的例子之一。它允许为新的字符设备编写设备驱动程序,而无需重写编译到stdout的程序。否则,每当有人推出新的行式打印机,终端或串行调制解调器时,您都必须重新编译操作系统上的每个程序。