是否可以使用真正的接口来实现多重继承

时间:2015-08-30 11:33:02

标签: java c# inheritance interface multiple-inheritance

我很长时间都有这种困惑。许多人说我们可以通过C#或Java等语言中的接口实现多重继承,而不像C ++那样支持它。但是我对继承和接口的理解却说没有。因为接口是用于验证与行为无关的实现的契约。接口定义了什么可以做什么(不是什么东西)。但遗传是继承父母的行为和/或财产(就像孩子从父母那里得到一些遗传行为 - 这是继承)。现在孩子正在学习一种技巧,比如绘画和烹饪,界面(证书或合同)可以证明孩子有这样的技能(这就是孩子除了从父母那里得到的东西之外可以做的事情 - 以及#39;不是继承)

我理解错了吗?如果没有那么为什么它说我们可以使用接口实现多重继承?

3 个答案:

答案 0 :(得分:3)

接口为您提供了类型的多重继承,但不是行为。实现ListMap的类是“ListMap”,但实现没有(必然)与任何现有的ListMap实现相关。

当然使用合成(无论如何都应该受到欢迎),您可以轻松创建ListMap,将listmap属性相应地委托给调用,同时提供一些可能有用的内容将各自的数据组合起来的功能。

使用Java 8接口是允许的默认方法,因此现在也可以继承行为。

答案 1 :(得分:0)

在Java中,您可以创建一个接口,例如Animal和一个抽象类Bird

然后你可以有一个类MockingBird来扩展Bird的行为,并实现Animal的行为。

但是,您可以将MockingBird作为AnimalBird来解决,因为&#34;会从两者继承&#34; 。< / p>

答案 2 :(得分:0)

不,接口不能用于实现多重继承

在Java中完全没有,在C#中,我们可以更接近。

当我想要实现一个观察者时,我研究了这个问题,最后在Robert Martin的博客中:http://blog.cleancoder.com/uncle-bob/2015/01/08/InterfaceConsideredHarmful.html

阅读这篇文章后,我意识到他正在谈论Java,但C#支持扩展方法,允许你在接口上附加行为,所以我试图在一些IObservable接口上实现我的实现,但显然失败了,即使我可以在这样的情况下附加行为接口扩展方法我仍然不允许在它们上附加状态,如果有一天microsoft决定实现extension properties那么这个组合(接口+扩展方法+扩展属性)可能足以真正模拟一些有用的多重继承。

目前,我们仍然坚持在博客中所述的所有观察者中复制代码或委托代码。