码迷,mamicode.com
首页 > 其他好文 > 详细

快学Scala 第十九课 (trait的abstract override使用)

时间:2017-08-24 23:55:10      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:under   如何   span   定义   ide   inpu   style   text   int   

trait的abstract override使用:

 

当我看到abstract override介绍的时候也是一脸懵逼,因为快学scala,只介绍了因为TimestampLogger中调用的super.log依旧是个abstract class,所以必须在方法前加上abstract和override。但是并没有具体介绍如何使用,然后查阅了其他文档,才明白使用方法。

下面的代码定义了超类LoggerEmpty,这个定义意味着该特质只能混入扩展LoggerEmpty的类中。 
在特质中声明抽象方法中有super调用,在特质里super调用时动态绑定的;而在类中,由于继承的抽象类,super调用时非法的。这里必须使用abstract override标识符,它意味着特质必须被混入某个具有期待方法的具体定义的类中,这种定义仅在特质定义中使用。

 

trait LoggerEmpty {
  println("LoggerEmpty trait")
  def log(msg: String)
}

trait TimestampLogger extends LoggerEmpty{
      println("TimestampLogger trait")
  abstract override def log(msg: String){
    println("TimestampLogger")
    super.log("TimestampLogger:" + msg)
  }
  
}

class TraitImp extends LoggerEmpty{
println("TraitImp class")
 def  log(msg: String) {
    println(msg)
  }
  
}

(new TraitImp() with TimestampLogger).log("input")

 

运行结果:

LoggerEmpty trait
TraitImp class
TimestampLogger trait
TimestampLogger
TimestampLogger:input

 

快学Scala 第十九课 (trait的abstract override使用)

标签:under   如何   span   定义   ide   inpu   style   text   int   

原文地址:http://www.cnblogs.com/AK47Sonic/p/7425565.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!