我得到隊列例子有點混淆了兩件事情:Scala的特徵和在第二次的Scala編程超例子編
問題1:爲什麼BasicIntQueue的方法沒有override關鍵字。
這裏的示例代碼:
abstract class IntQueue {
def get(): Int
def put(x: Int)
}
import scala.collection.mutable.ArrayBuffer
class BasicIntQueue extends IntQueue {
private val buf = new ArrayBuffer[Int]
def get() = buf.remove()
def put(x: Int) { buf += x }
}
它不應該是:
//class BasicIntQueue ...
override def get() = buf.remove()
override def put(x: Int) { buf += x }
我已經實現覆蓋和預期的結果是一樣的。
問題2:爲什麼超級特質?
trait Doubling extends IntQueue {
abstract override def put(x: Int) { super.put(2 * x) }
}
class MyQueue extends BasicIntQueue with Doubling
我試過它沒有super關鍵字,它失敗了。我畫了一個UML圖,但有一些模糊的推理爲什麼。
abstract override def put(x: Int) { super.put(2 * x) }
這條Doubling方法覆蓋了BasicInQueue的方法嗎?如果是這樣,爲什麼我們需要超級?爲什麼我們不能只是做:
abstract override def put(x: Int) { 2 * x }
對於我來說,上面的線將只覆蓋BasicInQueue的方法用一個新放的實現?抽象覆蓋關鍵字是在運行時進行某種堆棧操作的,對嗎?無論如何,我們爲什麼需要超級?超級指的是什麼?無論左邊是什麼?因此,BasicIntQueue with Doubling
是DoubleI指的BasicIntQueue中的超級關鍵字?
謝謝你,爲你的時間。