zoukankan      html  css  js  c++  java
  • 快学Scala 第二十课 (trait的构造顺序)

    trait的构造顺序:

    1. 首先调用超类构造器
    2. 特质构造器在超类构造器之后,类构造器之前执行
    3. 特质从左向右被构造
    4. 每个特质当中,父特质先被构造
    5. 如果多个特质共有一个父特质,而那个父特质已经被构造,则不会被再次构造
    6. 所有特质构造完毕,子类被构造
    class Account {
      println("Account constructor")
    }
    
    trait Logged {
      println("Logged constructor")
      def log(msg: String){ println("Logged")}
    }
    
    trait LongLogger extends Logged{
      println("LongLogger constructor")
       override def log(msg: String){
       println("LongLogger")  
         super.log(msg)
      }
      
    }
    
    trait ShortLogger extends Logged{
        println("ShortLogger constructor")  
       override def log(msg: String){
       println("ShortLogger")  
         super.log(msg)
      }
      
    }
    
    trait ConsoleLogger extends Logged {
      println("ConsoleLogger constructor")
      
     override def log(msg: String){
       println("ConsoleLogger")
        super.log(msg)
      }
      
    }
    
    trait DetailedLogger{
      println("DetailedLogger constructor")
       def log2(msg: String){
        println("DetailedLogger")
      }
      
    }
    
    class SavingsAccount extends Account with LongLogger with ShortLogger with ConsoleLogger {
      println("SavingsAccount constructor")
      log("funds")
      
    }
    
    new SavingsAccount() with DetailedLogger
    

    运行结果:

    Account constructor
    Logged constructor
    LongLogger constructor
    ShortLogger constructor
    ConsoleLogger constructor
    SavingsAccount constructor
    ConsoleLogger
    ShortLogger
    LongLogger
    Logged
    DetailedLogger constructor

  • 相关阅读:
    如何高效查看 Docker 日志
    linux:有效使用docker logs查看日志
    FFmpeg命令行工具学习(一):查看媒体文件头信息工具ffprobe
    性能调优
    【禅道】Windows本地安装禅道2.0.9
    Handle
    Operate the elements
    Web功能测试常用方法
    Drop down box selection(Select)
    Iframe
  • 原文地址:https://www.cnblogs.com/AK47Sonic/p/7429901.html
Copyright © 2011-2022 走看看