W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
我們需要能夠創(chuàng)建新的布局元素對象,前面定義的 Element 為抽象類,不能直接用來創(chuàng)建該類的對象,因此我們需要創(chuàng)建 Element 的子類。這些子類需要實現(xiàn) Element 類定義的抽象函數(shù)。
Scala 中派生子類的方法和 Java一樣,也是通過 extends 關(guān)鍵字。比如定義一個 ArrayElement:
class ArrayElement(conts: Array[String]) extends Element {
def contents: Array[String] = conts
}
其中 extends 具有兩個功效,一是讓 ArrayElement 繼承所有 Element 類的非私有成員,第二使得 ArrayElement 成為 Element 的一個子類。而 Elemen t稱為 ArrayElement 的父類。
如果你在定義類時沒有使用 extends 關(guān)鍵字,在 Scala 中這個定義類缺省繼承自 scala.AnyRef,如同在 Java 中缺省繼承自 java.lang.Object。這種繼承關(guān)系如下圖:
這幅圖中也顯示了 ArrayElement 和 Array[String] 之間的“組合”關(guān)系”(composition),類 ArrayElement 中定義了對 Array[String]類型對象的一個引用。
ArrayElement 繼承了 Element 的所有非私有成員,同時定義了一個 contents 函數(shù),這個函數(shù)中其父類(基類)中是抽象的,因此可以說 ArrayElement 中的 contents 函數(shù)實現(xiàn)了父類中的這個抽象函數(shù),也可以說“重載”(override)了父類中的同名函數(shù)。ArrayElement 繼承了 Element 的 width 和 height 方法,因此你可以使用 ArrayElement.width 來查詢寬度,比如:
scala> val ae=new ArrayElement(Array("hello","world"))
ae: ArrayElement = ArrayElement@729c1e43
scala> ae.width
res0: Int = 5
派生也意味著子類的值可以用在任何可以使用同名父類值的地方,比如:
val e: Element = new ArrayElement(Array("hello"))
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: