Scala与Classes的多重继承

rog*_*one 3 oop scala

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

moh*_*hit 8

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

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

                       A
                     /   \    
                    /     \
                   B       C
                    \     /
                     \   /
                       D
Run Code Online (Sandbox Code Playgroud)

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

特征避免了这个问题,因为它们没有构造函数.

  • @JörgWMittag很有意思.你能否引用消息来源.虽然如果Martin Odersky说scala集合库的源代码到处都有类,而且Martin是大多数文件的作者,那就很奇怪了. (2认同)