over 6 years ago
子類別宣告
子類別可以讀取到父類別的 property 或是 method,也可以自己新增。
class MyFirstClass {
var first = 123
}
class MySecondClass: MyFirstClass {
var second = 456
}
let c = MySecondClass()
c.first
c.second
子類別本身也可以當父類別
class MyFirstClass {
var first = 123
}
class MySecondClass: MyFirstClass {
var second = 456
}
class MyThirdClass: MySecondClass {
var third = 789
}
let c = MyThirdClass()
c.first
c.second
c.third
複寫
Override 是複寫的關鍵字,包含 method, property 與 subscript 都可以進行覆寫。
Super 關鍵字是用在實作複寫內容時,可以先去呼叫原始被覆寫的內容。
複寫 methods
class MyFirstClass {
func myFunc() {
}
}
class MySecondClass: MyFirstClass {
override func myFunc() {
super.myFunc()
}
}
複寫 property
- 可以將 read-only 的 property 複寫成 read-write。
- 不可以將 read-write 的 property 複寫成 read-only。
- 若複寫 setter,就必須複寫 getter。
class MyFirstClass {
var p: Int {
get {
return 123
}
set {
}
}
}
class MySecondClass: MyFirstClass {
override var p: Int {
get {
return super.p
}
set {
}
}
}
複寫 property observer
要注意不可以對常數與 read-only 的 property 複寫 property observer,
也不能夠對同一個 property 同時複寫 getter setter 與 observer,
複寫 property observer 時,父類別原本的 observer 一定會被呼叫到。
class MyFirstClass {
var p: Int = 1 {
didSet {
}
}
}
class MySecondClass: MyFirstClass {
override var p: Int {
didSet {
}
}
}
let c = MySecondClass()
c.p = 123
禁止複寫
final 關鍵字提供給 method, property, var, subscript 與 class 等等來禁止複寫。