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 等等來禁止複寫。

← iOS Swift : Methods & Subscripts iOS Swift : Initialization & Deinitialization →