百度云: http://pan.baidu.com/s/1jGjFpWy
腾讯微云: http://url.cn/TnGbdC
360云盘:http://yunpan.cn/cQ4c2UALDjSKy 访问密码 45e2
DT大数据梦工厂 温故而知新 之14讲scala 中的特质的使用
package TestPractice
/**
* @author Administrator
*/
object TraitDemo {
def main(args: Array[String]): Unit = {
var animal: Animal = new Dog1
println(animal.name + "\t" + animal.age + "\t" + animal.weight)
animal.sleep
animal.run
println("*****************************************")
animal = new Cat1
println(animal.name + "\t" + animal.age + "\t" + animal.weight)
animal.sleep
animal.run
}
}
//定义一个trait,代表一种特质,可以将它理解为java8中的接口
//特质是抽象的概念是不能直接创建实例的
trait Animal {
//特质中定义了两个抽象的成员字段
val name: String
//特质中定义了一个具体的成员字段
val weight = 18
var age: Int
//特质中可以有具体方法
def sleep(): Unit = {
println("animal runing... !")
}
//特质中也可以有抽象的方法
def run
}
//一个类去继承一个特质,就用有了这个特质的方法和字段
class Dog1 extends Animal {
//特质中的抽象变量必须被重写,不然类要变成抽象类,override可以省略
override val name: String = "wangcai"
override var age: Int = 3
//特质中的抽象方法要被重写,不然类要变成抽象类,override可以省略
override def run: Unit = {
println("dog runing...")
}
}
//一个类必须先extends一个类后,才能with一个特质
class Cat1 extends Object with Animal {
//特质中的抽象变量必须被重写,不然类要变成抽象类,override可以省略
override val name: String = "ketty"
override var age: Int = 5
//特质中的抽象方法要被重写,不然类要变成抽象类,override可以省略
override def run: Unit = {
println("cat running ......")
}
}
总结: trait类似于java8中的接口 ,特质是抽象的概念是不能直接创建实例的,具有抽象思想的属性和方法,一个类去继承一个特质,就用有了这个特质的方法和字段 一个类必须先extends一个类后,才能with一个特质