Scala学习笔记05--特质

在 Java 或者 Scala 的类中,super.method() 这样的方法调用是静态绑定的,也就是说当你在代码中写下 super.method() 的时候就能明确是调用它的父类的 method() 方法。

然而,如果是在特质中写下了 super.method() 时,它的调用是动态绑定的。调用的实现奖在每一次特质被混入到具体类的时候才被决定。

直截的讲就是超靠近后面的特质越优先起作用。当你调用带混入的类的方法是,最右侧特质的方法首先被调用。如果那个方法调用了 super,它调用其左侧特质的方法。

  1. object TraitTest {  
  2.     def main(args: Array[String]): Unit = {  
  3.         val person = new person with sayWorld with sayHello  
  4.         person.say("hey: ")  
  5.     }  
  6.   
  7.     abstract class animal() {  
  8.         def say(something: String)  
  9.     }  
  10.   
  11.     class person extends animal {  
  12.         var word = "I am person! "  
  13.         def say(something: String) {  
  14.             word = word + something  
  15.             print(word)  
  16.         }  
  17.     }  
  18.   
  19.     trait sayWorld extends animal {  
  20.         abstract override def say(something: String) {  
  21.             super.say(something + "world. ")  
  22.         }  
  23.     }  
  24.   
  25.     trait sayHello extends animal {  
  26.         abstract override def say(something: String) {  
  27.             super.say(something + "hello. ")  
  28.         }  
  29.     }  
  30.       
  31. }  

输出结果:I am person! hey: hello. world. 


tips:1.trait里super是动态绑定的。

              2.在这种方法上,打上abstract override标志。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值