Swift
继承
本文详细介绍了 Swift 中的继承,包括定义基类、子类生成、重写方法和属性、以及防止重写。
继承是面向对象编程中的一个核心概念。在 Swift 中,类可以从其他类继承方法、属性和其他特性。继承的类称为子类(Subclass),被继承的类称为超类(Superclass)。
注意:在 Swift 中,只有类支持继承,结构体和枚举不支持。
定义基类
不继承于其他类的类,称为基类(Base Class)。
class Vehicle {
var currentSpeed = 0.0
var description: String {
return "traveling at \(currentSpeed) miles per hour"
}
func makeNoise() {
// 什么也不做,因为车辆不一定会有噪音
}
}
let someVehicle = Vehicle()
print("Vehicle: \(someVehicle.description)")
// 打印 "Vehicle: traveling at 0.0 miles per hour"子类生成
子类生成(Subclassing)是在现有类的基础上创建一个新的类。子类继承了超类的特性,并且可以进行修改或添加新的特性。
class Bicycle: Vehicle {
var hasBasket = false
}
let bicycle = Bicycle()
bicycle.hasBasket = true
bicycle.currentSpeed = 15.0
print("Bicycle: \(bicycle.description)")
// 打印 "Bicycle: traveling at 15.0 miles per hour"重写 (Overriding)
子类可以提供其自己的实例方法、类型方法、实例属性、类型属性或下标的自定义实现,这称为重写。使用 override 关键字。
重写方法
class Train: Vehicle {
override func makeNoise() {
print("Choo Choo")
}
}
let train = Train()
train.makeNoise()
// 打印 "Choo Choo"重写属性
你可以重写继承的实例属性或类型属性,提供自己定制的 getter 和 setter,或者添加属性观察器。
class Car: Vehicle {
var gear = 1
override var description: String {
return super.description + " in gear \(gear)"
}
}
let car = Car()
car.currentSpeed = 25.0
car.gear = 3
print("Car: \(car.description)")
// 打印 "Car: traveling at 25.0 miles per hour in gear 3"重写属性观察器
class AutomaticCar: Car {
override var currentSpeed: Double {
didSet {
gear = Int(currentSpeed / 10.0) + 1
}
}
}
let automatic = AutomaticCar()
automatic.currentSpeed = 35.0
print("AutomaticCar: \(automatic.description)")
// 打印 "AutomaticCar: traveling at 35.0 miles per hour in gear 4"防止重写
你可以通过把方法、属性或下标标记为 final 来防止它们被重写(例如:final var,final func,final class func,final subscript)。
如果需要整个类都不能被继承,可以将 final 标记在 class 关键字之前(final class)。
final class FinalVehicle {
// 这个类不能被继承
}在 GitHub 上编辑
上次更新于