Scala特質的混入順序

代碼測試

package com.hlf.scala.basic

/**
  * 測試多個特質中有同一個方法,混入順序的不同最終調用的結果
  * 結果顯示:
  * 如果混入的特質是子父類型的話,調用的是子的方法
  * 如果混入的特質最終父類是同一個的話,調用的是最右邊的方法
  * Created by hlf on 2016/8/18.
  */
object TestTraitOrder {
  def main(args: Array[String]) {
    //先測試混入的特質有父子關係時的順序
    val test1 =new TestOrder with Foo with First
    val test2 =new TestOrder with First with Foo
    test1.name  //結果是First..........
    test2.name  //結果是First.......... 說明混入有父子關係的特質最終是調用子的方法

    //測試同繼承一個特質時的順序
    val test3 = new TestOrder with First with Second
    val test4 = new TestOrder with Second with First
    test3.name  //結果是Second........
    test4.name  //結果是First.........說明同是繼承一個父類時,最終調用的是右邊的方法

    //測試特質間的關係不是一層繼承關係時
    val test5 =  new TestOrder with First with Three
    val test6 =  new TestOrder with Three with First
    test5.name  //結果是Three........
    test6.name  //結果是First........說明繼承的父類最終是同一個時,調用的是右邊的方法

  }
}

trait Foo{ def name = println( "Fooo..........")}

trait First extends Foo{
  override def name: Unit = println( "First..........")
}

trait Second extends Foo{
  override def name: Unit = println( "Second........")
}

trait Three extends Second{
  override def name: Unit =  println( "Three........")
}

class TestOrder{}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章