Kotlin 教學【從零開始學 Kotlin 程式設計】繼承 Inheritance

【從零開始學 Kotlin 程式設計】
線上教學課程目錄:https://bit.ly/2Kx7GrM
Youtube 課程播放清單:https://bit.ly/3qJ5a5Q
繼承
在 Kotlin 中使用冒號「:」表示繼承關係,格式如下:
繼承
class 子類別名稱 : 父類別名稱() {
    // 子類別的屬性與方法定義
}
預設一般類別 class 都是關閉的,需特別在 class 前方加入 open 關鍵修飾詞,才能讓其他類別繼承。而類別中的屬性與方法也是,需特別在前方加入 open 關鍵字,才能讓繼承的子類別覆寫。否成編譯會報錯誤。
//父類別
open class SuperClass{
    open val myName = "HKT"
    open fun myFun() {
        println("MyPClass")
    }
}
//子類別
class SubClass() : SuperClass() {
    override val myName = "Hello"
    override fun myFun() {
        println("SubClass")
    }
}
fun main() {
    println(SubClass().myName)
    SubClass().myFun()
}
protected
而如果想要保護特定屬性或是方法,可以在屬性或方法前面加入 「protected」關鍵字,這樣只有繼承的子類別才能看到。
//父類別
open class SuperClass{
    protected open val myName = "HKT"
    protected open fun myFun() {
        println("MyPClass")
    }
}
//子類別
class SubClass() : SuperClass() {
    public override val myName = "Hello"
    public override fun myFun() {
        println("SubClass")
    }
}
fun main() {
    println(SuperClass().myName)//錯誤
    SuperClass().myFun()//錯誤
    println(SubClass().myName)
    SubClass().myFun()
}
子類別繼承父類別
定義一個父類別 Person
open class Person {
    //戶名
    var name: String = ""
    //地址
    var address: String = ""
}
定義一個子類別 Account 並且去繼承 Person 父類別
class Account : Person() {
    //帳號
    var id: String = ""
}
繼承父類別使用範例
fun main() {
    //實體化
    val account = Account()
    account.id = "123456789"
    account.name = “HKT"
    account.address = "台北市信義區信義路五段7號"
    println(account.id)
    println(account.name)
    println(account.address)
}
輸出結果
123456789
HKT
台北市信義區信義路五段7號
繼承後覆寫屬性
父類別中的屬性,若允許子類別繼承後可以覆寫屬性,須在前方加入 open 關鍵修飾詞,否則編譯時會報錯誤。反過來,若不提供子類別覆寫,則不需要加入open 修飾詞。
open class Person {
    //戶名
    open var name: String = ""
}
在子類別中加入 override 關鍵修飾詞,即可以修飾父類別中的屬性
class Account : Person() {
    //覆寫戶名
    override var name: String = ""
}
繼承後覆寫屬性使用範例
fun main() {
    //實體化
    val account = Account()
    account.name = "HKT"
    println(account.name)
}
輸出結果
HKT
繼承後覆寫函數
父類別中的方法,若允許子類別繼承後可以覆寫方法,須在前方加入 open 關鍵修飾詞,否則編譯時會報錯誤。反過來,若不提供子類別覆寫,則不需要加入open 修飾詞。
open class Person {
    open fun showName() {
        println("HKT")
    }
}
在子類別中加入 override 關鍵修飾詞,即可以修飾父類別中的方法
class Account : Person() {
    override fun showName() {
        println("Kitty")
    }
}
繼承後覆寫使用範例
fun main() {
    //實體化
    val account = Account()
    account.showName()
}
輸出結果
Kitty

那這次的課程就介紹到這邊囉~
順帶一提,KT 線上教室,臉書粉絲團,會不定期發佈相關資訊,不想錯過最新資訊,不要忘記來按讚,加追蹤喔!也歡迎大家將這套課程分享給更多人喔。
我們下次再見囉!!!掰掰