iT邦幫忙

2022 iThome 鐵人賽

DAY 16
0
自我挑戰組

連續30天 初學者介紹Scala語言系列 第 16

[Day 16]Scala繼承與組合 Part2

  • 分享至 

  • xImage
  •  
  • override
  • final

今天來介紹子類別如何呼叫父類別的建構式(constructor)

延續昨天的抽象類別及它的子類別:

abstract class Element {
    def contents: Array[String]
    val height = contents.length
    val width = if (height == 0) 0 else contents(0).length
}

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

這時我們需要創建一個新的類別,只需要extendsArrayElement即可:

class LineElement(s: String) extends ArrayElement(Array(s) {
    override def width = s.length
    override def height = 1
}

LineElement中的width和height都用了override關鍵字,因為它覆寫了父類別的成員。

由於LineElement是extends自ArrayElement,而ArrayElement的建構式接收一個Array[String]的參數,所以LineElement要向父類別傳入一個Array[String]的參數。

結論

要呼叫父類別的建構式,只需將要傳入的參數放在父類別名稱後的括號裡即可。

Final members

有時候父類別的某個成員不想被子類別繼承時,就在那個成員前面加上final 關鍵字。

class ArrayElement extends Element {
    final override demo() = {
        println("ArrayElement")
    } 
}

有時候想確保整個類別沒有子類別(subclass),那就在類別前加上final關鍵字。

final class ArrayElement extends Element {
     override demo() = {
        println("ArrayElement")
    } 
}

上一篇
[Day 15]Scala繼承與組合
下一篇
[Day 17]Scala Traits
系列文
連續30天 初學者介紹Scala語言30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言