请看以下代码:
- package com.yy.oop
-
-
- trait MyTrait1{
- println("MyTrait1 start...")
- def speak(name:String)
- }
-
-
- trait MyTrait2{
- println("MyTrait2 start...")
- def speak(name:String)
-
- def say = println("hello,MyTrait2.")
- }
-
-
- trait MyTrait3{
- println("MyTrait3 start...")
-
- var t3:String
- def speak(name:String)
- }
-
-
- trait MyTrait4{
- println("MyTrait4 start...")
- var t4:String = "It's me,MyTrait4."
- def speak(name:String)
- }
-
-
-
-
-
-
- class ConcreteMyTrait1 extends MyTrait4 with MyTrait3 with MyTrait2{
- println("ConcreteMyTrait1 start...")
- override var t3 = "overrider MyTrait3 t3"
- override def speak(name:String){
- println("name: " + name)
- }
- }
- object TraitTest {
-
- def main(args: Array[String]): Unit = {
- val obj = new ConcreteMyTrait1()
- obj.speak("ConcreteMyTrait1")
- }
- }
2、结果如下
- MyTrait4 start...
- MyTrait3 start...
- MyTrait2 start...
- ConcreteMyTrait1 start...
- name: ConcreteMyTrait1
从上面例子可以看出以下几点:
(1)trait可以包含抽象方法
(2)trait可以包含具体方法
(3)trait可以包含抽象字段
(4)trait可以包含具体字段
(5)多个trait共同实现使用with
(6)trait的构造顺序:从左到右依次构造,最后是本类
(7)trait的构造器是无参构造器,不能定义带参构造器