你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 《從零開始學Swift》學習筆記(Day 47)——final關鍵字

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

編輯:IOS開發綜合

  在類的定義中使用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 finalclass 'Person'

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

  Var overrides a 'final'var

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

  Instance method overridesa 'final' instance method

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

  Class method overrides a'final' class method

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

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved