【scala 特质】Scala的Trait特质使用

来源:互联网 发布:公司网络拓扑图 编辑:程序博客网 时间:2024/04/28 00:51

Trait 的使用场景

  • 当做接口
  • 带有具体实现的接口
  • 带有特质的对象
  • 特质从左到右被构造
package DataStructureAndAlgorithm/**  * Created by Administrator on 2017/12/23.  */// 特质 1// 带有具体实现的接口trait Logger1{  def log(msg: String): Unit ={    println("log: " + msg)  }}class Test1 extends Logger1{  def test: Unit ={    log("xxx_1")  }}// 特质 2// 当作接口trait Logger2{  def log(msg: String)}// 带有具体实现的接口trait ConsoleLogger2 extends Logger2{  def log(msg: String): Unit ={    println("log: " + msg)  }}class Test2 extends ConsoleLogger2{  def test: Unit ={    log("xxx_2")  }}// 特质 3trait ConsoleLogger {  def log(msg: String): Unit ={    println("save money: " + msg)  }}trait MessageLogger extends ConsoleLogger{  override def log(msg: String): Unit ={    println("save money to bank: " + msg)  }}abstract class Account{  def save}// 带有特质的对象class MyAccount extends Account with ConsoleLogger{  def save(): Unit ={    log("100")  }}object Test13ScalaTrait extends App{  val t = new Test1  t.test  val t2 = new Test2  t2.test  // 带有特质的对象(一个类可以通过 with 扩展多个特质,特质是从左到右被构造)  val m = new MyAccount with MessageLogger  m.save}

运行结果:

log: xxx_1log: xxx_2save money to bank: 100Process finished with exit code 0