1、当前实例的具体类型会被放到线性化队列的首个元素位置处
2、按照该实例的父类型的顺序从右到左的放置节点,针对每个父类型执行线性化算法,并将执行结果合并
3、按照从左到右的顺序,对类型节点进行检查,如果类型节点在该节点右边出现过,那么便将该类型移除
4、在类型线性化层次结构末尾处添加AnyRef和Any类型
如果是价值类,使用AnyVal类型替代AnyRef类型
例如
C1
T1 extends C1
T2 extends C1
T3 extends C1
C2 extends T2
C3 extends C2 with T1 with T2 with T3
线性化过程:
1、添加当前实例类型
C3
2、添加T3的线性化列表
C3,T3,C1
3、添加T2的线性化列表
C3,T3,C1,T2,C1
4、添加T1的线性化列表
C3,T3,C1,T2,C1,T1,C1
5、添加C2的线性化列表
C3,T3,C1,T2,C1,T1,C1,C2,T2,C1
6、移除所有重复的C1元素,保留最后一个
C3,T3,T2,T1,C2,T2,C1
7、移除所有重复的T2元素,保留最后一个
C3,T3,T1,C2,T2,C1
8、添加AnyRef和Any类型
C3,T3,T1,C2,T2,C1,AnyRef,Any