W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
在前面的例子 LineElement 使用了 override 來修飾 width 和 height 成員變量,在 Scala 中需要使用 override 來重載父類的一個非抽象成員,實現(xiàn)抽象成員無需使用 override,如果子類沒有重載父類中的成員,不可以使用 override 修飾符。
這個規(guī)則可以幫助編譯器發(fā)現(xiàn)一些難以發(fā)現(xiàn)的錯誤,可以增強系統(tǒng)安全進化。比如,如果你把 height 拼寫錯誤為 hight,使用 override 編譯器會報錯
root@mail:~/scala# scalac demo.scala
demo.scala:13: error: method hight overrides nothing
override def hight = 1
^
one error found
這個規(guī)則對于系統(tǒng)的演講尤為重要,假設你定義了一個 2D 圖形庫。你把它公開,并廣泛使用。庫的下一個版本里你想在你的基類 Shape 里增加一個新方法:
def hidden(): Boolean
你的新方法將被用在許多畫圖方法中去決定是否需要把形狀畫出來,這將可以大大提高系統(tǒng)繪圖的性能,但你不可以冒著破壞客戶代碼的風險做這件事。畢竟客戶說不定已經(jīng)使用不同的 hidde n實現(xiàn)定義了 Shape 的子類?;蛟S客戶的方法實際上是讓對象消失而不是檢測是否對象是隱藏的。因為這兩個版本的 hidden 互相重載,你的畫圖方法將停止對象的消失,這可真不是你想要的!
如果圖形庫和它的用戶是用 Scala 寫的,那么客戶的 hidden 原始實現(xiàn)就不會有 override 修飾符,因為這時候還沒有另外一個使用那個名字的方法。一旦你添加了 hidden 方法到你 Shape 類的第二個版本,客戶的重編譯將給出像下列這樣的錯誤:
.../Shapes.scala:6: error: error overriding method
hidden in class Shape of type ()Boolean;
method hidden needs 'override' modifier
def hidden(): Boolean =
也就是說,代之以錯誤的執(zhí)行,你的客戶將得到一個編譯期錯誤,這常常是更可取的。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: