類別繼承
繼承是什麼? 為什麼要有繼承?
假設我們有二個類別,分別為 class Pikachu(皮卡丘) 及 class Eve(依布),而這二個類別都同樣有 level的物件變數,且這二個類別都是神奇寶貝 “Pokemon”。
那麼我們就可以把共通的屬性 level置於父類別Pokemon,然後Pikachu及Eve繼承Pokemon。這樣就可以直接copy Pokemon 的 level屬性。
fun main(args:Array<String>){
var p1=Pikachu()
p1.level=100
var e1=Eve()
e1.level=10
println("p1 level : ${p1.level}")
println("e1 level : ${e1.level}")
}
open class Pokemon{
var level:Int=0
constructor(){
println("神奇寶貝出生了")
}
}
class Pikachu: Pokemon{
constructor(){
println("皮卡丘出生了")
}
}
class Eve: Pokemon{
constructor(){
println("Eve出生了")
}
}
結果:
神奇寶貝出生了
皮卡丘出生了
神奇寶貝出生了
Eve出生了
p1 level : 100
e1 level : 10
Pikachu及Eve二個子類別,並沒有宣告level這個物件變數,但卻可以在p1及e1取得level,這就表示Pikachu及Eve這二個類別 copy了Pokemon裏的level變數。
class 預設為final
kotlin的類別預設為final,是不准被繼承的。所以為了要能繼承Pokemon, 就必需父類別Pokemon之前加上open 關鍵字,才可被Pikachu繼承。
繼承運算子 “:”
kotlin繼承使用 “:” 運算子,跟Java的 “extends” 是同樣的意思。
