重写属性观察器
在属性重写中为一个继承来的属性添加属性观察器,当继承来的属性发生改变时就可以监测到
注意:
不可以给继承来的常量存储属性
或者继承来的只读计算型属性
添加属性观察器
//父类
class Circle {
var radius = 12.5
var area: String {
return "矩形半径 \(radius) "
}
}
// 继承父类 Circle
class Rectangle: Circle {
var print = 7
//重写area属性
override var area: String {
return super.area + " ,但现在被重写为 \(print)"
}
}
class Square:Rectangle {
//重写父类Circle的radius属性
override var radius: Double {
//监测radius属性有新值后对父类Rectangle中的print属性赋新值
didSet {
print = Int(radius/5.0)+1
}
}
}
调用
func overridePropertyStudy(){
let rect = Rectangle()
rect.radius = 25.0
rect.print = 3
print("Radius \(rect.area)")
let sq = Square()
sq.radius = 60.0
print("半径:\(sq.area)")
}
调用结果
Radius 矩形半径 25.0 ,但现在被重写为 3
半径:矩形半径 60.0 ,但现在被重写为 13
防止重写
使用 final 关键字防止继承属性被子类重写
如果重写了final
方法,属性或下标脚本在编译时会报错
可以通过在关键字class声明的类前添加final关键字(final class)将整个类标记为final防重写类
,这样标记的类是不可以被继承,会报编译错误
网友评论