scala的trait

来源:互联网 发布:nginx 禁止访问目录 编辑:程序博客网 时间:2024/05/21 11:27

请看以下代码:

[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的构造器是无参构造器,不能定义带参构造器

0 0
原创粉丝点击