基本介绍

构建对象的时候同时混入多个特质,称之为叠加特质,那么特质声明的顺序从左到右,方法执行顺序从右到左

  1. 在叠加特质的时,首先从左到右特质开始执行
  2. Scala中如果特质调用super,并不是表示调用父特质的方法,而是向前面(左边)继续查找特质,如果找不到才回去父特质查找
  3. 当我们在执行特质的方法的时候我们时从右到左执行特质
  4. 当执行到super时,执行的时左边的特质,只有当找不到特质的时候才回去执行父类的方法

叠加特质的细节和注意事项

  • 特质生命顺序从左到右
  • Scala在执行叠加对象的方法时,会首先从后面的特质,从右到左开始执行
  • Scala中如果调用super,并不是调用父特制的方法,而是向卡面积
  • 如果向调用具体特制的方法,可以执行 super[特质].xxx,其中的泛型必须时持改特制的超类型

在特质中重写抽象方法

如何理解 abstract override

当我们给某个方法增加了abstract override后,就是明确的告述编译器,该方法确实是重写了父特制的抽象方法,但是重写后该方法仍是一个抽象方法(因为没有完全实现,需要其它特质继续实现[通过混入排序])

特质的构造顺序(是针对于,那种声明类的时候就混入了特质,静态混入)

第2种特质构造顺序(在构建对象时,动态混入特质)

  1. 调用当前类的超类构造器
  2. 当前类构造器
  3. 第一个特质构造器的父特质构造器
  4. 第一个特质构造器
  5. 第二个特质构造器的父特质构造器,如果已经执行过,就不再执行
  6. 第二个特质构造器
  7. ……重复5,6的步骤(如果有第3个,第4个特质)
  8. 当前类构造器

特质的构造顺序(是针对于,那种声明类的时候就混入了特质,动态混入)

区别就是 如果你new对象他会先new对象再混入其它特质

分析两种方式对构造顺序的影响

  1. 第1种方式实际是构建类对象,在混入特质时,该对象还没有创建。
  2. 第2种方式实际是构造匿名子类,可以理解成在混入特质时,对象已经创建了。