《從零開始學Swift》學習筆記(Day 47)——final關鍵字

智捷關東昇發表於2016-03-23

原創文章,歡迎轉載。轉載請註明:關東昇的部落格

  在類的定義中使用final關鍵字宣告類、屬性、方法和下標。final宣告的類不能被繼承,final宣告的屬性、方法和下標不能被重寫。  
  下面看一個示例:    

final class Person {    //宣告為final,說明它是不能被繼承的

    var name: String

    final var age: Int    //定義的age屬性

    final func description() -> String {    //定義description例項方法
    return "\(name) 年齡是: \(age)"
    }

    final class func printClass() ->() {    //定義printClass靜態方法
    print( "Person 列印...")
    }

    init (name: String, age: Int) {
    self.name = name
    self.age  = age
    }
}

class Student: Person {                            //編譯錯誤

    var school: String

    convenience init() {
    self.init(name: "Tony", age: 18, school: "清華大學")
    }

    init (name: String, age: Int, school: String) {
    self.school = school
    super.init(name: name, age: age)
    }

    override func description() -> String {         //編譯錯誤    //試圖重寫description例項方法
    print("父類列印 \(super.description())")
    return "\(name) 年齡是: \(age), 所在學校: \(school)。"
    }

    override class func printClass() ->() {      //編譯錯誤    //試圖重寫printClass靜態方法
    print( "Student 列印...")
    }

    override var age: Int {                        //編譯錯誤    //試圖重寫age屬性
    get {
    return super.age
    }
    set {
    super.age = newValue < 8 ? 8: newValue
    }
    }

}

  定義Student類,並宣告為Person子類時,會報如下編譯錯誤:

Inheritance from a final class 'Person'

  定義的age屬性也是final,那麼在試圖重寫age屬性時,會報如下編譯錯誤:

Var overrides a 'final' var

  定義description例項方法,它被宣告為final,那麼在試圖重寫description例項方法時,會報如下編譯錯誤:

Instance method overrides a 'final' instance method

  定義printClass靜態方法,它被宣告為final,那麼在試圖重寫printClass靜態方法時,會報如下編譯錯誤:

Class method overrides a 'final' class method

  使用final可以控制我們的類被有限地繼承,特別是在開發一些商業軟體時,適當地新增final限制是非常有必要的。

歡迎關注關東昇新浪微博@tony_關東昇。 關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程資訊

enter image description here

更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com 智捷課堂論壇網站:http://51work6.com/forum.php

相關文章