9.3.10 自身类型
当特质A 继承类B 的时候, 编译器能够确保的一件事是所有混入该特质A 的类都认类B 作为自己的超类.
Scala 还有另外一套机制也可以保证这一点: 自身类型(self type)
当特质以如下代码开始定义:
this: 类型C =>
表示: 只能被类型C 的子类来混入.
package com.atguigu.day08
object SelfDemo {
def main(args: Array[String]): Unit = {
val console = new Console
}
}
// Logger 即使自身类型的特质
trait Logger{
// 告诉编译器: 我就是 Exception, 如果没有这句话 getMessage 没法调用
// 同时告诉编译器, 混入本特质的类先继承 Exception或者 Exception 的子类
this: Exception=>
def log(): Unit ={
println(getMessage)
}
}
class Console extends Exception with Logger{
}