您好,登錄后才能下訂單哦!
這篇文章主要介紹“Scala怎么使用組合與繼承”,在日常操作中,相信很多人在Scala怎么使用組合與繼承問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Scala怎么使用組合與繼承”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
組合與繼承是利用其它現(xiàn)存類定義新類的兩個方法。如果你接下來的工作主要是代碼重用,通常你應(yīng)采用組合而不是繼承。只有繼承受脆基類問題之苦,這種情況你可能會無意中通過改變超類而破壞了子類。
關(guān)于繼承關(guān)系你可以問自己一個問題,是否它建模了一個is-a關(guān)系。Meyers,《Effective C++》 【Mey91】例如,說ArrayElement是Element是合理的。你能問的另一個問題是,是否客戶想要把子類類型當作超類類型來用。Eckel,《Thinking in Java》【Eck98】在ArrayElement的例子里,我們的確期待客戶會想要把ArrayElement當作Element使用。
如果你對展示在圖釋10.3的繼承關(guān)系問了這些的問題,那么是否感覺其中的任何關(guān)系有可疑嗎?尤其是,對你來說LineElement是ArrayElement是否顯而易見呢?你是否認為客戶會需要把LineElement當作ArrayElement使用?實際上,我們把LineElement定義為ArrayElement主要是想重用ArrayElement的contents定義。因此或許把LineElement定義為Element的直接子類會更好一些,就像這樣:
class LineElement(s: String) extends Element { val contents = Array(s) override def width = s.length override def height = 1 }
前一個版本中,LineElement與ArrayElement有一個繼承關(guān)系,從那里繼承了contents。現(xiàn)在它與Array有一個組合關(guān)系:在它自己的contents字段中持有一個字串數(shù)組的引用。類ArrayElement也與Array有組合關(guān)系,因為它的參數(shù)化contents字段持有字串數(shù)組的引用。ArrayElement的代碼展示在第xx頁的代碼10.5中。其組合關(guān)系用一個菱形表現(xiàn)在類圖中,正如展示在第xx頁的圖釋10.1中那樣。有了LineElement的這個實現(xiàn),Element的繼承層級現(xiàn)在看上去如展示在圖釋10.4中那樣。
圖釋 10.4 修改了LineElement后的類層級
到此,關(guān)于“Scala怎么使用組合與繼承”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。