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{

}
Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2019-04-12 14:58:36

results matching ""

    No results matching ""