原創文章,歡迎轉載。轉載請註明:關東昇的博客 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_ 關東昇。
關注智捷課堂微信公共平臺,瞭解最新技術文章、圖書、教程信息
更多精品iOS、Cocos、移動設計課程請關注智捷課堂官方網站:http://www.zhijieketang.com
智捷課堂論壇網站:http://51work6.com/forum.php