swift从零开始-14-继承
继承
本页内容包括:
1.定义一个基类
2.子类生成
3.重写
4.防止重写
一个类可以继承另一个类的方法,属性,其他特性。当一个类继承其他类时,继承类叫做子类,被继承类叫做超类(或父类)。在swift中,继承是区分'类'与其他类型的一个基本特征。
定义一个基类
不继承于其他类,称之为基类。例:如下定义了一个车辆类
class Vehicle {
var numberOfWheels: Int
var maxPassengers: Int
var currentSpeed = 0.0
var description: String {
return "\(numberOfWheels) wheels; up to \(maxPassengers) passengers"
}
func makeNoise() {
//
}
init() {
numberOfWheels = 0
maxPassengers = 1
}
}
Vehicle类定义了构造器来设置属性的值
子类生成
指的是在一个已有的类的基础上创建一个新的类。子类继承超类的特性,并且可以优化或改变它,还可以为子类添加新的特性。
定义一个新的类叫Bicycle, 它继承了Vehicle的特性
class Bicycle: Vehicle {
override init() {
super.init()
numberOfWheels = 2
}
}
重写
子类可以为继承来的实例方法,类方法,实例属性,或附属脚本提供自己定制的实现。把这种行为叫做重写。如果要重写某个属性,你需要在重新定义的前面加上override
关键字。这么做,就表明你是想提供一个重写版本,而非错误的提供一个相同的定义。
override
关键字会提醒swift编译器去检查该类的超类(或其中一个父类)是否有匹配重写版本的声明。这个检查可以确保你的重写定义是正确的。
1. 重写方法
class Train: Vehicle {
override func makeNoise() {
print("Choo Choo")
}
}
2. 重写属性
可以重写继承来的实例属性和类型属性,提供自己定制的getter
和setter
。
class Car: Vehicle {
var gear = 1
override var description: String {
return super.description + "in gear \(gear)"
}
}
3. 重写属性观察器
可以通过重写属性为一个继承来的属性添加属性观察器
class AutomaticCar: Car {
override var currentSpeed: Double {
didSet {
gear = Int(currentSpeed/10.0) + 1
}
}
}
4. 访问超类的方法,属性及下标
在合适的地方,可以通过super前缀来访问超类版本的方法属性和小标。
1.someMethod() -> super.someMethod()
2.someProperty -> super.someProperty
3.下标的重写实现中,可以通过super[someIndex]来访问超类版本中的相同下标
防止重写
可以通过把方法,属性或下标标记为final来防止它们被重写。在声明关键字前加上final
修饰符即可:final var
,final func
, final class func