scala学習-trait学習
2254 ワード
trait scala 。 , 。
trait :
trait ConsoleLogger{ def logger(msg: String) = {println(msg)} }
abstract class IntQueue {
def get(): Int
def put(x: Int)
}
もう1つのクラスがIntQueueクラスから継承されることを定義し、この抽象クラスの抽象メソッドgetとputを実現し、プライベートフィールドbufを作成します.
class BasicIntQueue extends IntQueue{
private val buf = new ArrayBuffer[Int]
def get() = buf.remove(0)
def put(x: Int) { buf += x}
}
IntQueueから継承されたtraitを定義し、スーパークラスのputメソッドを複写します.
trait Doubling extends IntQueue {
abstract override def put(x: Int) { super.put(x * 2)}
}
上記のtraitで呼び出されたsuperは動的にバインドされています.次のクラスを定義すると
class MyQueue extends BasicIntQueue with Doubling
このときDoublingという特質が混入した後,このときのsuperバインドのBasicIntQueueのputメソッド.