共计 911 个字符,预计需要花费 3 分钟才能阅读完成。
特质 Trait
Trait 可堆叠特性
可自由组合你的算法,非常灵活。越靠后的特质越先执行。
特质使用的线性化解读 super
abstract class IntQueue {def get(): Int
def put(x: Int)
}
class BasicIntQueue extends IntQueue {private val buf = new ArrayBuffer[Int]()
override def get(): Int = buf.remove(0)
override def put(x: Int): Unit = buf += x
}
trait Doubling extends IntQueue {abstract override def put(x: Int): Unit = super.put(2 * x)
}
trait Increming extends IntQueue {abstract override def put(x: Int): Unit = super.put(x + 1)
}
trait Filtering extends IntQueue {abstract override def put(x: Int): Unit = if (x > 0) super.put(x)
}
val myqueue1 = new BasicIntQueue with Doubling with Filtering with Increming
myqueue1.put(1)
println(myqueue1.get())
val myqueue2 = new BasicIntQueue with Increming with Filtering with Doubling
myqueue2.put(1)
println(myqueue2.get())
val myQueue = new BasicIntQueue with Doubling with Increming with Filtering
myQueue.put(-1)
println(myQueue.get())
要特质还是不要?
- 如果某个行为不会被复用
用具体的类 - 如果某个行为可能被用于多个互不相关的类
用特质,只有特质才能被混入类继承关系中位于不同组成部分的类 - 如果想从 Java 代码中继承某个行为
用抽象类 - 上述问题都考虑之后,仍然没有答案
试试特质吧
正文完