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