成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Scala學(xué)習(xí):使用組合與繼承

開(kāi)發(fā) 后端
本文節(jié)選自Martin Odersky,Lex Spoon和Bill Venners所著,Regular翻譯的《Programming in Scala》的第十章。Scala是一種針對(duì) JVM 將函數(shù)和面向?qū)ο蠹夹g(shù)組合在一起的編程語(yǔ)言。

組合與繼承是利用其它現(xiàn)存類定義新類的兩個(gè)方法。如果你接下來(lái)的工作主要是代碼重用,通常你應(yīng)采用組合而不是繼承。只有繼承受脆基類問(wèn)題之苦,這種情況你可能會(huì)無(wú)意中通過(guò)改變超類而破壞了子類。

51CTO編輯推薦:Scala編程語(yǔ)言專題

關(guān)于繼承關(guān)系你可以問(wèn)自己一個(gè)問(wèn)題,是否它建模了一個(gè)is-a關(guān)系。Meyers,《Effective C++》 【Mey91】例如,說(shuō)ArrayElement是Element是合理的。你能問(wèn)的另一個(gè)問(wèn)題是,是否客戶想要把子類類型當(dāng)作超類類型來(lái)用。Eckel,《Thinking in Java》【Eck98】在ArrayElement的例子里,我們的確期待客戶會(huì)想要把ArrayElement當(dāng)作Element使用。

如果你對(duì)展示在圖釋10.3的繼承關(guān)系問(wèn)了這些的問(wèn)題,那么是否感覺(jué)其中的任何關(guān)系有可疑嗎?尤其是,對(duì)你來(lái)說(shuō)LineElement是ArrayElement是否顯而易見(jiàn)呢?你是否認(rèn)為客戶會(huì)需要把LineElement當(dāng)作ArrayElement使用?實(shí)際上,我們把LineElement定義為ArrayElement主要是想重用ArrayElement的contents定義。因此或許把LineElement定義為Element的直接子類會(huì)更好一些,就像這樣:

  1. class LineElement(s: String) extends Element {  
  2.  val contents = Array(s)  
  3.  override def width = s.length  
  4.  override def height = 1 
  5. }  
前一個(gè)版本中,LineElement與ArrayElement有一個(gè)繼承關(guān)系,從那里繼承了contents。現(xiàn)在它與Array有一個(gè)組合關(guān)系:在它自己的contents字段中持有一個(gè)字串?dāng)?shù)組的引用。類ArrayElement也與Array有組合關(guān)系,因?yàn)樗膮?shù)化contents字段持有字串?dāng)?shù)組的引用。ArrayElement的代碼展示在第xx頁(yè)的代碼10.5中。其組合關(guān)系用一個(gè)菱形表現(xiàn)在類圖中,正如展示在第xx頁(yè)的圖釋10.1中那樣。有了LineElement的這個(gè)實(shí)現(xiàn),Element的繼承層級(jí)現(xiàn)在看上去如展示在圖釋10.4中那樣。

 修改了LineElement后的類層級(jí) 

圖釋 10.4 修改了LineElement后的類層級(jí)

【相關(guān)閱讀】

  1. 在Scala中定義final成員
  2. Scala程序中如何實(shí)現(xiàn)多態(tài)和動(dòng)態(tài)綁定
  3. Scala學(xué)習(xí):調(diào)用超類構(gòu)造器和override修飾符的使用
  4. Scala:重載方法和字段及定義參數(shù)化字段
  5. Scala程序中的擴(kuò)展類

責(zé)任編輯:book05 來(lái)源: Artima
相關(guān)推薦

2009-02-04 17:32:03

ibmdwJavaScala

2010-08-03 09:15:05

ScalaSpring

2022-12-26 00:00:03

非繼承關(guān)系JDK

2009-08-06 14:01:53

Scala的優(yōu)點(diǎn)

2009-11-16 17:04:46

Inside Scal

2009-12-11 10:43:00

Scala講座混入多重繼承類型層次

2009-07-22 07:43:00

Scala閉包

2009-07-22 07:47:00

Scala客戶代碼

2009-07-21 16:58:31

Scala變量范圍

2009-09-09 10:50:55

Scala例子Scala與Java

2010-09-01 09:29:51

CSS層疊CSS繼承

2009-07-08 16:10:24

Scala簡(jiǎn)介面向?qū)ο?/a>函數(shù)式

2009-12-09 09:15:47

從Java走進(jìn)ScalTwitter API

2009-07-21 14:30:38

Scalatry-catch

2009-09-09 11:28:40

Scala類

2010-09-13 10:55:44

SQL Server

2009-07-08 15:35:18

Case類Scala

2009-07-22 07:57:00

ScalaCurry化函數(shù)

2018-11-01 09:14:42

CNNRNN神經(jīng)網(wǎng)絡(luò)

2009-06-17 13:26:06

scala繼承模型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 欧美自拍视频 | 久久免费观看视频 | 91免费在线视频 | 黄色一级网| 国产 欧美 日韩 一区 | 97福利在线 | 韩日有码 | 久久久一区二区 | 日韩视频免费看 | 欧美日韩亚洲二区 | 日韩欧美在线不卡 | 一级国产精品一级国产精品片 | 亚洲日日 | 伊人在线| 五月综合色啪 | 欧美一级免费看 | 久久成人在线视频 | 久久99成人| 亚洲一区二区电影网 | 国产精品黄视频 | 在线观看国产视频 | 免费中文字幕 | 一区二区三区四区免费观看 | 久久久亚洲一区 | 青娱乐自拍| 国产精品1区 | www.国产 | 天堂男人av| 一级黄a视频 | 日韩中文字幕区 | 欧美精品一区三区 | 亚洲欧美日韩久久久 | 国产精品视频免费播放 | 欧美在线一区二区三区四区 | 欧美日韩在线免费观看 | 视频在线一区二区 | 国产午夜精品一区二区三区在线观看 | 亚洲视频欧美视频 | 久久精品中文 | 国产精品波多野结衣 | 亚洲在线一区 |