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 線上教室,臉書粉絲團,會不定期發佈相關資訊,不想錯過最新資訊,不要忘記來按讚,加追蹤喔!也歡迎大家將這套課程分享給更多人喔。
我們下次再見囉!!!掰掰