关键词:swift, 继承, 重写, override, final, private
继承
概述
- 在Swift中继承是区别类与其他类型的基本特征。
- 类可以调用父类的方法、属性、下标,并可以重写这些。
- 基类不需要继承自任何类(OC中需要继承NSObject)。
基类示例
class FileClass {
var name = "aa"
var size = 11
func displayInfo() {
print("名称:\(name) 大小:\(size)")
}
}
重写
重写方法
父类方法需要为非私有,即方法名前没有private修饰。
///子类
class VoiceFileClass : FileClass {
//方法重写,override 重写的关键词
override func displayInfo() {
print("大小:\(size) 名称:\(name)")
}
}
重写属性
- 子类重写的set或get方法,父类必须也实现过。
- 父类实现了的set或get或都实现了,子类也必须都实现。
- 属性重写,相当于是重写属性的方法。
///基类
class FileClass {
var ttNick = "mm"
var nickName: String {
set {
ttNick = newValue
}
get {
return ttNick
}
}
}
///子类
class VoiceFileClass : FileClass {
//必须要父类的属性也实现了这些方法,才能被重写。
override var nickName: String {
set {
ttNick = newValue + "666"
}
get {
return ttNick + "777"
}
}
}
重写属性观察器
不需要父类实现过willSet或didSet方法。
///基类
class FileClass {
var ttNick = "mm"
}
///子类
class VoiceFileClass : FileClass {
//重写属性观察器,不要求父类实现过。
override var ttNick: String {
willSet {
print("赋值前:\(ttNick)")
}
didSet {
print("完成赋值后:\(ttNick)")
}
}
}
总结一下
属性相关的重写,其实就是在重写属性的方法,重写set、get需要父类也实现过,重写willSet、didSet不需要父类实现过。
防止重写
通过在属性、下标、方法、类前加final
修饰,可防止被重写。用于修饰类时,这个类将不能被继承。