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{}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值