最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Scala程序中的擴(kuò)展類(lèi)是什么

這篇文章主要講解了“Scala程序中的擴(kuò)展類(lèi)是什么”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Scala程序中的擴(kuò)展類(lèi)是什么”吧!

為嘉峪關(guān)等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及嘉峪關(guān)網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、嘉峪關(guān)網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專(zhuān)業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

我們?nèi)匀恍枰軌騽?chuàng)建新的元素對(duì)象。你已經(jīng)看到了因?yàn)轭?lèi)Element是抽象的,所以“new Element”不能被用來(lái)做這件事。因此,為了實(shí)例化一個(gè)元素,我們需要?jiǎng)?chuàng)建擴(kuò)展了Element并實(shí)現(xiàn)抽象的contents方法的子類(lèi)。代碼10.3展示了一種可能的方式:

class ArrayElement(conts: Array[String]) extends Element {   def contents: Array[String] = conts  }

代碼 10.3 定義ArrayElement為Element的子類(lèi)

類(lèi)ArrayElement定義為擴(kuò)展了類(lèi)Element。就好象Java里,你在類(lèi)名之后使用extends子句那樣:

... extends Element ...

這種extends子句有兩個(gè)效果:使類(lèi)ArrayElement從類(lèi)Element繼承所有非私有的成員,并且使ArrayElement成為Element的子類(lèi)型。由于ArrayElement擴(kuò)展了Element,類(lèi)ArrayElement被稱(chēng)為類(lèi)Element的子類(lèi)。反過(guò)來(lái),Element是ArrayElement的超類(lèi)。

如果你省略extends子句,Scala編譯器隱式地假設(shè)你的類(lèi)擴(kuò)展自scala.AnyRef,在Java平臺(tái)上與java.lang.Object一致。因此,類(lèi)Element隱式地?cái)U(kuò)展了類(lèi)AnyRef。

繼承:inheritance表示超類(lèi)的所有成員也是子類(lèi)的成員,除了以下兩點(diǎn)。

首先,超類(lèi)的私有成員不被子類(lèi)繼承。其次,在子類(lèi)中實(shí)現(xiàn)的與超類(lèi)中的成員具有相同名稱(chēng)和參數(shù)的將不被繼承到子類(lèi)中。這種情況我們說(shuō)子類(lèi)的成員重載:override了超類(lèi)的成員。如果子類(lèi)中的成員是具體的而超類(lèi)中的是抽象的,我們還可以說(shuō)具體的成員實(shí)現(xiàn):implement了抽象的。

例如,ArrayElement的contents方法重載(或者可說(shuō)成:實(shí)現(xiàn))了類(lèi)Element的抽象方法contents。這個(gè)設(shè)計(jì)的一個(gè)漏洞是因?yàn)榉祷財(cái)?shù)組是可變的,所以客戶端能改變它。本書(shū)中我們希望事情盡量簡(jiǎn)化,但當(dāng)ArrayElement是真實(shí)項(xiàng)目中的部分時(shí),你應(yīng)當(dāng)考慮代之以返回一個(gè)數(shù)組的防御性拷貝。另一個(gè)問(wèn)題是我們現(xiàn)在并不確信contents數(shù)組所有的String元素具有同樣的長(zhǎng)度。這可以通過(guò)在主構(gòu)造器中檢查前提條件,并且一旦違反則拋出異常的方式來(lái)解決。相對(duì)的,類(lèi)ArrayElement從類(lèi)Element繼承了width和height方法。例如,給定ArrayElement的一個(gè)對(duì)象ae,你可以使用ae.width查詢其長(zhǎng)度,就好象width是定義在類(lèi)ArrayElement中一樣:

scala> val ae = new ArrayElement(Array("hello", "world"))  ae: ArrayElement = ArrayElement@d94e60 scala> ae.width  res1: Int = 5

子類(lèi)型化:subtyping是指子類(lèi)的值可以被用在需要其超類(lèi)的值的任何地方。例如:

val e: Element = new ArrayElement(Array("hello"))

變量e被定義為類(lèi)型Element,所以其初始化的值也應(yīng)當(dāng)是Element。實(shí)際上,初始化值的類(lèi)型是ArrayElement。這也沒(méi)問(wèn)題,因?yàn)轭?lèi)ArrayElement擴(kuò)展了類(lèi)Element,并且因此,類(lèi)型ArrayElement適用于類(lèi)型Element。
存在于ArrayElement和Array[String]之間的組合:composition關(guān)系。這種關(guān)系被稱(chēng)為組合的原因是由于類(lèi)ArrayElement是被Array[String]“組合”出來(lái)的。因此Scala編譯器將在它為ArrayElement產(chǎn)生的二進(jìn)制類(lèi)中安置一個(gè)字段用來(lái)保留傳入的conts數(shù)組的引用。

感謝各位的閱讀,以上就是“Scala程序中的擴(kuò)展類(lèi)是什么”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Scala程序中的擴(kuò)展類(lèi)是什么這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


分享名稱(chēng):Scala程序中的擴(kuò)展類(lèi)是什么
本文來(lái)源:http://fisionsoft.com.cn/article/gijjdh.html