Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 是不是;“组成重于继承”;也意味着;“界面上的合成”;?_Oop_Inheritance_Language Agnostic_Composition - Fatal编程技术网

Oop 是不是;“组成重于继承”;也意味着;“界面上的合成”;?

Oop 是不是;“组成重于继承”;也意味着;“界面上的合成”;?,oop,inheritance,language-agnostic,composition,Oop,Inheritance,Language Agnostic,Composition,我知道继承意味着“是一种”关系,它也可以有多态行为。但是,例如,在Java中,从父类扩展和实现接口之间的区别在于接口只有要实现的方法。它们都需要子类依赖于父类,并需要引导类相互耦合 因此,除了从父类扩展之外,如果可能的话,还应该避免实现类的接口吗?组合优先于继承原则指的是您试图重用代码的情况 该原则说,通过组合重用代码比通过继承重用代码更好 它不适用于接口,因为接口不实现将被重用的代码(至少在Java 8:)。接口是允许您反转依赖关系的主要机制之一,因此实现可以依赖于抽象,而不是相反。因此,如果

我知道继承意味着“是一种”关系,它也可以有多态行为。但是,例如,在Java中,从父类扩展和实现接口之间的区别在于接口只有要实现的方法。它们都需要子类依赖于父类,并需要引导类相互耦合

因此,除了从父类扩展之外,如果可能的话,还应该避免实现类的接口吗?

组合优先于继承原则指的是您试图重用代码的情况

该原则说,通过组合重用代码比通过继承重用代码更好


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

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

与任何其他语言功能一样,它也可能被滥用或过度使用。但当用于依赖项反转时,它基本上通过使程序的行为易于扩展而增强了程序的“组合”

当然,如果您有足够的创造力,您可能会想出如何在不使用接口的情况下进行依赖项反转。长期以来,没有接口的语言一直在进行依赖倒置。stdio/iostreamapi就是最好的例子之一。它允许为新字符设备编写设备驱动程序,而无需重新编译写入标准输出的程序。否则,每当有人提出一个新的行打印机,终端或串行调制解调器,你必须重新编译几乎每一个程序在你的操作系统