为什么Scala不支持普通类的多重继承?我们不能应用相同的线性化逻辑我们也适用于Traits的类吗?这应该是可能的,因为它是通过C3线性化在Python中实现多重继承(使用普通类)的方式.
我不知道Python,但IMO,特征和类之间的区别是构造函数.
与常规方法相比,构造函数具有许多限制.例如,每个对象只能调用一次,必须为每个新对象调用它们,子类构造函数必须调用它的父对象构造函数.
A
/ \
/ \
B C
\ /
\ /
D
Run Code Online (Sandbox Code Playgroud)
现在,着名的钻石问题.如果B和C继承自A和D继承自B和C,那么A的构造函数将被调用两次.与选择traits方法的实现不同,必须调用B和C的构造函数,而这些构造函数又需要调用A的构造函数.
特征避免了这个问题,因为它们没有构造函数.