2011-04-28 50 views
0

是否有任何语言允许同时继承两个或更多类?是否有允许同时继承两个或更多类的任何语言?

我知道PHP和Java不允许这样做。我猜其他语言也不允许这样做。但为什么?我认为这会非常有用。这里的代码(这不是任何语言的语法是否正确),说明我的意思......

class X extends Y, Z { 

} 

如果有可能,类X将具有Y和Z都字段和方法。

回答

4

C++允许多重继承。

可以由Bjarne Stroustrup的,C++的创作者在文章中读出这个功能here的完整说明。

但它不是银弹您所有的问题。多重继承通常会产生比解决问题更多的问题。如果你发布了一个问题来解释你试图用你选择的语言来达到什么目的,也许你可以得到更好的建议?

我当然不会建议学习C++只是为了利用多重继承。

+0

我现在没有任何具体问题。我只是觉得它会有用...有时。你能解释一下“更多问题”是什么意思吗? – daGrevis 2011-04-28 11:50:20

+0

@daGrevis:http://en.wikipedia.org/wiki/Diamond_problem是一个经典的答案。但除此之外,随着继承的不断发展,情况开始变得复杂起来。 10次​​中的9次,有更好的解决方案,不涉及多重继承。在像C#这样的语言中,执行决定认为该特性实现比通常有用的更复杂,因此完全从语言中省略。经验证据表明,很少有程序员错过它。 – 2011-04-28 11:53:50

1

想象一下,你有两个属性/在两个Y和Z类相同名称的方法,所以编译器不知道哪个阶级属性/方法必须被继承。

*在Java中,您可以使用Interfaces进行多重继承。

+0

我认为这应该是逻辑,X先从Y继承,然后从Z.Z比Y高,因为它在Y之后。所以如果两个(Y和Z)都有,例如,相同的方法,最后,X会有Z方法。 – daGrevis 2011-04-28 11:58:44

+0

@daGrevis:嗯,这是一个有趣的方法。在我熟悉的语言(C++)中,当涉及到继承时,没有“排序”的概念。然而,看起来你所描述的正是Perl如何处理这个问题,需要你在有序列表中指定继承类。在我看来,这是一个奇怪的模型,但解决钻石问题的方法有很多。 – 2011-04-29 00:43:03

+0

有趣。我认为这是如此的逻辑。 = D感谢您的回答! – daGrevis 2011-04-29 10:15:44

0

的Python:

class DerivedClassName(Base1, Base2, Base3): 
<statement-1> 
. 
. 
. 
<statement-N> 

Python tutorial 9.5.1。多继承

6

多重继承是由下列语言支持:

Perl中,Perl 6中,Python和C++,卷曲,迪伦,艾菲尔,Logtalk,对象REXX,OCaml中,和Tcl 另外斯卡拉(通过使用混入类)和PHP(通过使用traits类的)

和良好知道

有些语言,如C#,Java和Ruby的实现单继承虽然协议,或接口,提供一些真正的多重继承的功能。

相关问题