玩過其他開發語言的小伙伴都知道繼承,也就是子類繼承父類的特性。這在開發過程中非常有用,可以節省大量工作量。
## 聲明基類
下面我們聲明一個常見的基類Base,有兩個屬性(count、description)和一個方法(inherited),其中description是只讀的。
~~~
/// 基類
class Base {
var count = 0.0
var description: String {
return "count:\(count)"
}
// MARK: 可繼承
func inherited() {
}
}
~~~
## 子類化
子類繼承基類很簡單,聲明如下,子類和父類間用“:”隔開,如果有多個父類,父類間用“,”隔開。
~~~
/// 子類
class Subclass: Base {
}
~~~
## 重寫
在子類中可以實現父類的所有特性,但是有的時候我們想擴展屬性或方法。這個時候就需要用到關鍵字Overriding。
下面讓子類重寫父類的屬性和方法。
~~~
class Subclass: Base {
// 繼承的屬性和方法前都有override
override var count:Double {
didSet {
print("\(__FUNCTION__)")
}
}
override var description: String {
return "\(__FUNCTION__)" + super.description
}
override func inherited() {
print("\(__FUNCTION__)")
}
}
~~~
可以在屬性和方法前使用override,表示這個屬性和方法是繼承了父類。如果想調用父類的屬性或方法,只需要使用super后面跟你想使用的屬性和方法。你可以理解為self代表當前類,super代表父類。
## 防止重寫
有的時候我們不希望其他人通過繼承改寫我們的特性,希望它是不可重寫的。這里可以使用關鍵字final,如下所示:
- final var/let:防止常量或變量被重寫;
- final func:防止實例方法被重寫;
- final class func:防止類型方法被重寫;
- final subscript:防止下標方法被重寫;
- final class:防止當前類被繼承。
這里以實例方法舉例,在Base中添加如下方法:
~~~
final func preventing() {
// 如果不想子類繼承,可在類、屬性或方法前添加final
}
~~~
則子類Subclass不可重寫此方法。
## 其他
### 參考資料
[The Swift Programming Language (Swift 2.1)](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html)
### 文檔修改記錄
| 時間 | 描述 |
|-----|-----|
| 2015-10-28 | 根據 [The Swift Programming Language (Swift 2.1)](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html)中的Inheritance總結 |
版權所有:[http://blog.csdn.net/y550918116j](http://blog.csdn.net/y550918116j)
- 前言
- Swift函數
- Swift閉包(Closures)
- Swift枚舉(Enumerations)
- Swift類和結構體(Classes and Structures)
- Swift屬性(Properties)
- Swift方法(Methods)
- Swift下標(Subscripts)
- Swift繼承(Inheritance)
- Swift初始化(Initialization)
- Swift銷毀(Deinitialization)
- Swift可選鏈(Optional Chaining)
- Swift錯誤處理(Error Handling)
- Swift類型選擇(Type Casting)
- Swift協議(Protocols)
- Swift訪問控制(Access Control)
- Swift高級運算符(Advanced Operators)