Scala 特质
特质用于类之间共享接口与字段,类似于Java的接口。类可以扩展特质,但是特质不能被实例化,因此也没有参数。
1 定义特质
# 定义最小限度特质
trait HairColor
# 使用泛型与抽象方法
trait Iterator[A]{
def hasNext:Boolean
def next():A
}
2 使用特质
# 类扩展特质
class IntIterator(to:Int) extends Iterator[Int] {
private var current = 0
override def hasNext:Boolean = current < to
override def next(): Int = {
if(hasNext) {
val t = current
current += 1
t
}else 0
}
}
3 子类型化
# 特质定义
trait Pet {
val name: String
}
# 类定义
class Cat(val name: String) extends Pet
class Dog(val name: String) extends Pet
# 实例化
val dog = new Dog("Harry")
val cat = new Cat("Sally")
# 特质指向所有实现特质的子类
val animals = ArrayBuffer.empty[Pet]
animals.append(dog)
animals.append(cat)
animals.foreach(pet => println(pet.name))
翻译源:Scala Tour