Swift 物件繼承 (Inheritance)
繼承是物件導向程式設計的核心。一個類別可以繼承另一個類別的方法、屬性和其他特性。
- 子類別 (Subclass):繼承別人的類別。
- 父類別 (Superclass):被繼承的類別。
在 Swift 中,只有類別 (Class) 支援繼承。結構 (Struct) 和列舉 (Enum) 不支援。
定義基礎類別 (Base Class)
class Vehicle {
var currentSpeed = 0.0
var description: String {
return "traveling at \(currentSpeed) miles per hour"
}
func makeNoise() {
// 預設什麼都不做
}
}
定義子類別
在類別名稱後面加上冒號和父類別名稱:
class Bicycle: Vehicle {
var hasBasket = false
}
let bicycle = Bicycle()
bicycle.hasBasket = true
bicycle.currentSpeed = 15.0 // 繼承自 Vehicle
覆寫 (Overriding)
子類別可以提供父類別方法的自定義實作,這稱為覆寫。你需要使用 override 關鍵字。
class Train: Vehicle {
override func makeNoise() {
print("Choo Choo")
}
}
你也可以覆寫屬性 (通常是為了添加觀察者 Property Observers):
class Car: Vehicle {
var gear = 1
override var currentSpeed: Double {
didSet {
gear = Int(currentSpeed / 10.0) + 1
}
}
}
如果需要在覆寫的方法中呼叫父類別的原本實作,使用 super 前綴:
super.makeNoise()
防止覆寫 (Preventing Overrides)
如果你不希望某個方法或屬性被子類別覆寫,可以使用 final 關鍵字:
final var speedLimit = 60.0
final func emergencyStop() { /* ... */ }
如果你將整個類別標記為 final (final class),那麼這個類別就完全不能被繼承。這在效能優化和框架設計中很有用。