Scala 特质(Traits )
ScalaTrait特质
Scala中的特征类似于Java中的接口。一个trait可以有字段和方法作为成员,创建trait时这些成员可以是抽象的和非抽象的。
Scala特质的实现可以在Scala类或对象中实现特征。
Scala特质的一些特征:
成员可以是抽象成员,也可以是具体成员。
一个特质可以被另一个特质扩展。
使用“trait”关键字制成。
语法:
trait trait_name{
def method()
}显示特质使用的示例
此示例取自https://docs.scala-lang.org/tour/traits.html
trait Iterator[A] {
def hasNext: Boolean
def next(): A
}
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
}
}
val iterator = new IntIterator(10)
iterator.next() // 返回0
iterator.next() // 返回1这个例子展示了特质的使用以及它是如何被继承的?该代码创建一个特质名称Iterator,此特质有2个抽象方法hasNext和next。这两种方法都在定义逻辑的IntInterator类中定义。然后为该类创建对象以使用trait函数。
另一个工作示例
trait hello{
def greeting();
}
class Ihelp extends hello {
def greeting() {
println("Hello! This is include Help! ");
}
}
object MyClass {
def main(args: Array[String]) {
var v1 = new Ihelp();
v1.greeting
}
}输出结果
Hello! This is include Help!
该代码显示“您好!这包括帮助!”。使用特征函数重新定义,然后调用该函数。
关于使用特质的一些利弊
特质是Scala中的一个新概念,因此用途有限且互操作性较低。因此,对于可与Java代码一起使用的Scala代码,不应使用特征。抽象类将是一个更好的选择。
Traits可以在多个类中使用时使用,也可以在其他类中使用Traits。
如果一个成员仅使用一次,则应使用具体的类而不是Traits,这将提高代码的效率并使其更可靠。