zoukankan      html  css  js  c++  java
  • 快学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

  • 相关阅读:
    Windows程序调试系列: 使用VC++生成调试信息 转
    mysql基础
    mysql bug
    VS2010下配置Winpcap 开发环境
    WIN7 下面 装XP
    Iptables 指南 1.1.19
    mysql内核 innodb存储引警(卷1)配书 用VS 2003 编绎 mysql-3.23.49 源代码
    cmake
    Windows+VS2012环境下编译调试MySQL源码 转
    哈佛图书馆自习室墙上的训言 (自勉)
  • 原文地址:https://www.cnblogs.com/AK47Sonic/p/7425565.html
Copyright © 2011-2022 走看看