玩過其他開發語言的小夥伴都知道繼承,也就是子類繼承父類的特性。這在開發過程中非常有用,可以節省大量工作量。
聲明基類
下面我們聲明一個常見的基類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)
文檔修改記錄
時間 | 描述 |
---|---|
2015-10-28 | 根據 The Swift Programming Language (Swift 2.1)中的Inheritance總結 |
版權所有:http://blog.csdn.net/y550918116j