快学Scala 第十九课 (trait的abstract override使用)
Posted AK47Sonic
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快学Scala 第十九课 (trait的abstract override使用)相关的知识,希望对你有一定的参考价值。
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使用)的主要内容,如果未能解决你的问题,请参考以下文章