您的位置:首页 > 大数据 > 人工智能

Scala trait介绍

2015-12-07 22:40 369 查看
请看以下代码:

package com.yy.oop

//简单的trait介绍
trait MyTrait1{
println("MyTrait1 start...")
def speak(name:String)
}

//含有具体实现方法的trait
trait MyTrait2{
println("MyTrait2 start...")
def speak(name:String)
//具体实现
def say = println("hello,MyTrait2.")
}

//含有抽象字段的trait
trait MyTrait3{
println("MyTrait3 start...")
//抽象字段
var t3:String
def speak(name:String)
}

//含有具体字段的trait
trait MyTrait4{
println("MyTrait4 start...")
var t4:String = "It's me,MyTrait4."
def speak(name:String)
}

/**
* 验证功能:
* 1:多个Trait的语法格式:with
* 2:多个Trait的构造顺序:extends后的第一个--》从左到右的with trait --》本身类
*/
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的构造器是无参构造器,不能定义带参构造器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息