2015-08-30 50 views
2

我有这个困惑很久。许多人说我们可以通过像C#或Java这样的语言来实现多重继承,但不像C++那样支持它。但是我对继承和接口的理解却说不。因为接口是合同来验证与行为无关的实现。接口定义了什么可以做(不是什么东西)。但继承是继承父母的行为和/或财产(例如,孩子正在从父母那里获得一些基因行为 - 这是继承)。现在孩子正在学习一门技巧,比如说绘画和烹饪,而界面(证书或合同)就是验证孩子是否拥有这样的技能(这是孩子可以做的,而不是他从父母那里得到的东西 - 这就是不是继承)真的可以用接口来实现多重继承吗

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

+0

http:// stackoverflow。com/questions/3556652/how-do-java-interfaces-simulate-multiple-inheritance选中此链接。它可能有帮助 – Saud

回答

3

接口给你一个类型的多重继承,但不是行为。实现ListMap的类是“ListMap”,但是实现与任何现有的ListMap实现没有任何关系(必然)。

当然,使用成分(应反正青睐),你可以很容易地创建相应其listmap性能ListMap其代表的呼吁,同时提供将结合各自的数据大概是一些有用的功能。

由于Java 8接口允许使用默认方法,所以行为的继承现在也成为可能。

0

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

那么你可以有一个MockingBird类,它扩展了Bird的行为并实现了Animal的操作。

然而,就可以解决MockingBird作为Animal或作为Bird因为它“继承”从两个

0

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

没有在Java中所有,在C#中,我们可以得到接近。

我研究这个问题时,我想实现一个观察者,并在罗伯特·马丁的博客结束了:http://blog.cleancoder.com/uncle-bob/2015/01/08/InterfaceConsideredHarmful.html

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

现在,我们被困在博客中所述的所有观察者中的代码或代码重复。