scala的trait

请看以下代码:

[java]  view plain  copy
 print ?
  1. package com.yy.oop  
  2.   
  3. //简单的trait介绍  
  4. trait MyTrait1{  
  5.   println("MyTrait1 start...")  
  6.   def speak(name:String)  
  7. }  
  8.   
  9. //含有具体实现方法的trait  
  10. trait MyTrait2{  
  11.   println("MyTrait2 start...")  
  12.   def speak(name:String)  
  13.   //具体实现  
  14.   def say = println("hello,MyTrait2.")  
  15. }  
  16.   
  17. //含有抽象字段的trait  
  18. trait MyTrait3{  
  19.   println("MyTrait3 start...")  
  20.   //抽象字段  
  21.   var t3:String  
  22.   def speak(name:String)  
  23. }  
  24.   
  25. //含有具体字段的trait  
  26. trait MyTrait4{  
  27.   println("MyTrait4 start...")  
  28.   var t4:String = "It's me,MyTrait4."  
  29.   def speak(name:String)  
  30. }  
  31.   
  32. /** 
  33.  * 验证功能: 
  34.  * 1:多个Trait的语法格式:with 
  35.  * 2:多个Trait的构造顺序:extends后的第一个--》从左到右的with trait --》本身类 
  36.  */  
  37. class ConcreteMyTrait1 extends MyTrait4 with MyTrait3 with MyTrait2{  
  38.   println("ConcreteMyTrait1 start...")  
  39.   override var t3 = "overrider MyTrait3 t3"  
  40.   override def speak(name:String){  
  41.     println("name: " + name)  
  42.   }  
  43. }  
  44. object TraitTest {  
  45.     
  46.   def main(args: Array[String]): Unit = {  
  47.       val obj = new ConcreteMyTrait1()  
  48.       obj.speak("ConcreteMyTrait1")  
  49.   }  
  50. }  
2、结果如下

[plain]  view plain  copy
 print ?
  1. MyTrait4 start...  
  2. MyTrait3 start...  
  3. MyTrait2 start...  
  4. ConcreteMyTrait1 start...  
  5. name: ConcreteMyTrait1  

从上面例子可以看出以下几点:

(1)trait可以包含抽象方法

(2)trait可以包含具体方法

(3)trait可以包含抽象字段

(4)trait可以包含具体字段

(5)多个trait共同实现使用with

(6)trait的构造顺序:从左到右依次构造,最后是本类

(7)trait的构造器是无参构造器,不能定义带参构造器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值