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