how multiple inheritance via interface is useful?
Possible Duplicate:
Why is Multiple Inheritance not allowed in Java or C#?
问题:C支持多重继承吗?答:是的,使用界面。
现在我的qusetion:如果我们继承了一个接口,那么我们必须实现它。因此,我们编写自己的代码,然后我们如何使用继承的核心概念,即继承接口的可重用性。所以看来,通过接口进行的多重继承是无用的。如果我错了,那么通过接口的多重继承有多有用?
- 实现多个接口不是多重继承。所以不,C不支持多重继承。您不继承接口,而是实现它。
- 您的问题与实现多个接口有什么关系?您的问题似乎首先是关于实现接口(即使它只是一个接口)的目的,而不是具体地实现其中的几个接口。
- @我的问题是,使用接口进行多重继承有多有用?
- @拉萨,这没用,因为它不存在…实现多个接口与多个继承无关。
- @Thomaslevesque接口通常被描述为多重继承的"轻量级"形式。当然不是这样,它满足了一些需求,最明显的是替代原则。
你混淆了两个不同的概念:
- 类继承,其中类继承基类的成员和行为。您只能有一个基,C不支持多重继承
- 接口实现,这是表示类完成的契约的一种方法。您可以实现任意多的接口。
所以,如果您希望通过实现接口来继承行为,那么它当然看起来是无用的…实现一个接口只是告诉其他人"嘿,我知道怎么做(某物)"的一种方式。它不会自动提供"某物"的实现,这部分由您决定。
实现一个接口就是创建一个对象,该对象被保证执行特定的函数和方法的"契约",使它可以被期望实现该接口的对象的任何方法使用。
考虑排序函数的理论davidw.icomparer接口。一般排序可能需要一个支持davidw.icomparer接口的对象,该接口提供两个对象之间的比较。davidw.icomparer的一个实现提供了特定的实现,这些实现定义了正在排序的两个对象在使用者的问题域中的关系。
接口定义了一个契约,实现者提供了文字管道。这就是价值所在。实际上,你不会"继承"一个接口……
- IComparer不是理论上的。使用IComparable。
- @nneonneo:这个答案中提到的IComparer接口是理论上的。
- 在理论上以一个例子为背景进行讨论。拜托。
- 我知道,但他所指的界面确实存在。不,我没有投他反对票。
- 所以如果我说"我的公司"就不要投反对票?
- @不,不是的。他所指的接口是理论上的,正如问题中所说的那样,与这一点完全无关,是否有一个真正存在的同名接口。请想象一下,例如,他所说的不是实际的System.Collections.IComparer,而是理论上的DavidW.IComparer。案子解决了,对吧?
- 我只是想指出,如果他提到一个真正存在的界面,答案会更清楚,因为C拥有它(因此没有必要称之为理论讨论)。我无意批评这个答案。
- @O.R.Mapper是个很棒的建议,我修改了我的答案来反映它。比改成"icomparinizerinator"要好得多:()
- @啊,那好吧。对不起,如果我听起来很严厉。如果在实践中已经存在同名的接口,那么您的第一条评论听起来有点像完全忽略了设想理论接口的可能性。
- @O.R.Mapper:不,这不是我的意图。我只是觉得如果用一个真正的界面来表达,答案会更有意义。你不必要求读者去想象一个虚构的结构,只要你能引用一个真实的东西。