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