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

  • 相关阅读:
    线程进程之间的关系
    socket网络编程
    Docker在github上的站点
    大型网站架构体系的演变
    centos7 安装SSH
    如何在CentOS 7中禁用IPv6
    在 Docker 上运行一个 RESTful 风格的微服务
    docker 操作命令详解
    玩转Docker镜像
    搭建自己的 Docker 私有仓库服务
  • 原文地址:https://www.cnblogs.com/AK47Sonic/p/7429901.html
Copyright © 2011-2022 走看看