package com.hlf.scala.basic
/**
* 测试多个特质中有同一个方法,混入顺序的不同最终调用的结果
* 结果显示:
* 如果混入的特质是子父类型的话,调用的是子的方法
* 如果混入的特质最终父类是同一个的话,调用的是最右边的方法
* Created by hlf on 2016/8/18.
*/objectTestTraitOrder {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........说明继承的父类最终是同一个时,调用的是右边的方法
}
}
traitFoo{def name = println( "Fooo..........")}
traitFirstextendsFoo{overridedef name: Unit = println( "First..........")
}
traitSecondextendsFoo{overridedef name: Unit = println( "Second........")
}
traitThreeextendsSecond{overridedef name: Unit = println( "Three........")
}
classTestOrder{}