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

原創文章,歡迎轉載。轉載請註明:關東昇的博客  php

在類的定義中使用final關鍵字聲明類、屬性、方法和下標。final聲明的類不能被繼承,final聲明的屬性、方法和下標不能被重寫。java

下面看一個示例: 微信

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子類時,會報以下編譯錯誤:ide

Inheritance from a final class 'Person'網站

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

Var overrides a 'final' var.net

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

Instance method overrides a 'final' instance methodcode

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

Class method overrides a 'final' class method

使用final能夠控制咱們的類被有限地繼承,特別是在開發一些商業軟件時,適當地添加final限制是很是有必要的。

 

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

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

相關文章
相關標籤/搜索