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_Interface_Composition - Fatal编程技术网

Oop 接口继承和接口组合的区别

Oop 接口继承和接口组合的区别,oop,inheritance,interface,composition,Oop,Inheritance,Interface,Composition,Q1:使用“接口继承”和“带接口的组合”设计OOP代码的原理有什么不同?(请专注于处理接口部分,因为我知道继承和组合,以及为什么组合优于继承) 问题2:当接口继承优于组合或组合+接口时,有没有任何用例场景 附言:重点应放在继承和组合中界面的作用上。任何涉及相关设计的额外提示都将受到高度赞赏。A1 您可以说接口继承是声明性的,因为它只说明接口应该是什么样子: public IDerivedInterface : ISomeOtherInterface { /*...*/ } 这些接口仍然没有行为

Q1:使用“接口继承”和“带接口的组合”设计OOP代码的原理有什么不同?(请专注于处理接口部分,因为我知道继承和组合,以及为什么组合优于继承)

问题2:当接口继承优于组合或组合+接口时,有没有任何用例场景

附言:重点应放在继承和组合中界面的作用上。任何涉及相关设计的额外提示都将受到高度赞赏。

A1 您可以说接口继承是声明性的,因为它只说明接口应该是什么样子:

public IDerivedInterface : ISomeOtherInterface { /*...*/ }
这些接口仍然没有行为,只有形状

public Foo DoFoo(Bar bar)
{
    var qux = this.baz.Corge(bar); // baz is IBaz, an interface
    var garply = this.grault.Waldo(qux); // grault is IGrault, another interface
    return garply.ToFoo();
}
另一方面,与接口的组合是组装实现的一种方式

public Foo DoFoo(Bar bar)
{
    var qux = this.baz.Corge(bar); // baz is IBaz, an interface
    var garply = this.grault.Waldo(qux); // grault is IGrault, another interface
    return garply.ToFoo();
}
DoFoo
方法
IBaz
IGrault
组成。这些接口中的一个或两个可以定义为独立接口,或在编写的接口中-DoFoo方法不关心

A2
正如上面的回答所解释的,接口继承和组合是两个独立的关注点,因此没有必要偏袒其中一个。它们可以共存,但不一定要共存。

您缺少了像
java
C
这样的语言标签。。。此外,接口可以由接口继承(使用建议的语言)