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

快学Scala 第十八课 (trait多继承)

时间:2017-08-23 22:14:07      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:ogg   相同   div   extend   over   一个   类的继承   int   super   

trait多继承:

 

trait的继承并不像类拥有相同的含义!在下面这个例子中,如果还是运用类的继承的思想,那么运行结果将是什么也没有。

trait Logged {
  def log(msg: String){ }
}

trait ConsoleLogger extends Logged {
 override def log(msg: String){
       super.log(msg)

  }
  
}

但是事实并非如此:

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


trait ConsoleLogger extends Logged {
 override def log(msg: String){
   println("ConsoleLogger")
       super.log(msg)
  }
  
}

trait ShortLogger extends Logged{
   override def log(msg: String){
   println("ShortLogger")
  }
  
}

class SavingsAccount extends ShortLogger with ConsoleLogger {
  println("SavingsAccount")
  log("funds")
  
}

new SavingsAccount()

运行结果:

SavingsAccount
ConsoleLogger
ShortLogger

由上可见,super.log通常调用trait从最后一个开始,从右往左调用。但是如果右边的trait是左边trait的超类,那么次序会调换,先调用子再调用父。

如果想要强制调用父trait,则可使用以下方式:

trait ConsoleLogger extends Logged {
 override def log(msg: String){
   println("ConsoleLogger")
    super[Logged].log(msg)

  }
  
}

 

快学Scala 第十八课 (trait多继承)

标签:ogg   相同   div   extend   over   一个   类的继承   int   super   

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

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