Scala与Classes的多重继承

时间:2015-05-04 16:00:41

标签: scala oop

为什么Scala不支持普通类的多重继承?我们是否也可以应用相同的线性化逻辑,我们也适用于Traits的类?这应该是可能的,因为它是通过C3线性化在Python中实现多重继承(使用普通类)。

2 个答案:

答案 0 :(得分:8)

我不知道Python,但是IMO,特征和类之间的区别是构造函数。

与普通方法相比,构造函数有许多限制。例如,每个对象只能调用一次,必须为每个新对象调用它们,子类构造函数必须调用它的父元素的构造函数。

                       A
                     /   \    
                    /     \
                   B       C
                    \     /
                     \   /
                       D

现在,着名的钻石问题。如果B和C继承自A和D继承自B和C,那么A的构造函数将被调用两次。与选择traits方法的实现不同,必须调用B和C的构造函数,而这些构造函数又需要调用A的构造函数。

Traits避免了这个问题,因为它们没有构造函数。

答案 1 :(得分:1)

Scala根本不需要课程。你可以让traits拥有构造函数,并完成它。

它有类的唯一原因是与底层主机平台的兼容性。 Scala希望运行的大多数平台(Java,.NET,Objective-C / Cocoa,ECMAScript)仅支持类的单继承(或ECMAScript中的原型)。