scala言语基础学习六

时间:2022-07-25 18:22:32

trait的学习

1、将trait作为接口来使用

scala言语基础学习六

trait中可以实现一些方法,子类只要extends 了trait就可以直接使用父trait里面的方法

scala言语基础学习六

普通继承的话父类和子类之间的field是通过引用访问,而trait之间的继承scala编译器会直接用同一个field

scala言语基础学习六

scala言语基础学习六

trait的抽象filed 继承者必须实现

scala言语基础学习六

为实例混入trait

scala言语基础学习六

scala言语基础学习六

trait调用链

scala言语基础学习六

在trait中覆盖抽象方法

scala言语基础学习六

此时不能调用因为是抽象方法

混合使用trait的具体方法和抽象方法

scala言语基础学习六

trait的构造机制

在具有继承和with多个trait的情况下,先调用父类的构造方法,然后再依次从左到右边调用trait的构造方法(只要不存在方法中的代码全部是trait的构造方法代码),最后调用自己的构造方法

scala言语基础学习六

案例

scala言语基础学习六

解决办法提前初始化1:

scala言语基础学习六

解决办法利用lazy2:

scala言语基础学习六