91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Scala程序中的擴展類是什么

發布時間:2021-12-09 15:09:47 來源:億速云 閱讀:169 作者:iii 欄目:編程語言

這篇文章主要講解了“Scala程序中的擴展類是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Scala程序中的擴展類是什么”吧!

我們仍然需要能夠創建新的元素對象。你已經看到了因為類Element是抽象的,所以“new Element”不能被用來做這件事。因此,為了實例化一個元素,我們需要創建擴展了Element并實現抽象的contents方法的子類。代碼10.3展示了一種可能的方式:

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

代碼 10.3 定義ArrayElement為Element的子類

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

... extends Element ...

這種extends子句有兩個效果:使類ArrayElement從類Element繼承所有非私有的成員,并且使ArrayElement成為Element的子類型。由于ArrayElement擴展了Element,類ArrayElement被稱為類Element的子類。反過來,Element是ArrayElement的超類。

如果你省略extends子句,Scala編譯器隱式地假設你的類擴展自scala.AnyRef,在Java平臺上與java.lang.Object一致。因此,類Element隱式地擴展了類AnyRef。

繼承:inheritance表示超類的所有成員也是子類的成員,除了以下兩點。

首先,超類的私有成員不被子類繼承。其次,在子類中實現的與超類中的成員具有相同名稱和參數的將不被繼承到子類中。這種情況我們說子類的成員重載:override了超類的成員。如果子類中的成員是具體的而超類中的是抽象的,我們還可以說具體的成員實現:implement了抽象的。

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

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

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

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

變量e被定義為類型Element,所以其初始化的值也應當是Element。實際上,初始化值的類型是ArrayElement。這也沒問題,因為類ArrayElement擴展了類Element,并且因此,類型ArrayElement適用于類型Element。
存在于ArrayElement和Array[String]之間的組合:composition關系。這種關系被稱為組合的原因是由于類ArrayElement是被Array[String]“組合”出來的。因此Scala編譯器將在它為ArrayElement產生的二進制類中安置一個字段用來保留傳入的conts數組的引用。

感謝各位的閱讀,以上就是“Scala程序中的擴展類是什么”的內容了,經過本文的學習后,相信大家對Scala程序中的擴展類是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

遂昌县| 峨眉山市| 四平市| 奉化市| 永清县| 手游| 花莲市| 元江| 清流县| 天镇县| 石景山区| 新邵县| 阿鲁科尔沁旗| 阿巴嘎旗| 乐昌市| 平陆县| 郎溪县| 洛浦县| 广饶县| 贵州省| 新和县| 佳木斯市| 红安县| 永登县| 南乐县| 慈利县| 衡东县| 桂东县| 沈丘县| 寿宁县| 安远县| 霸州市| 长治县| 普定县| 铜梁县| 岳阳县| 鄂托克旗| 阿城市| 和田市| 沁阳市| 高清|