继承(Inheritance)
2019-07-16 本文已影响0人
曹来东
- 值类型(枚举 结构体)不支持继承,只有类支持继承
- 没有父类的类,称为:基类
-
Swift
没有像OC
,Java
那样的规定:任何类最终都要继承自某个基类 - 子类可以重写父类的
下标
方法
属性
,重写必须加上override
关键字
重写类型方法 和 下标
- 被
class
修饰的类型方法,下标,允许
被子类重写 - 被
static
修饰的类型方法,下标,不允许
被子类重写
重写属性
- 子类可以将父类的属性(存储 计算)重写为
计算属性
- 子类
不可以
将父类属性重写为存储属性
- 只能重写
var
属性,不能重写let
属性 - 重写时,属性名,类型要一致
- 子类重写后的属性权限 不能小于 父类属性的权限
- 如果父类属性是只读的,那么子类重写后的属性可以是只读的,也可以是可读写的
- 如果父类属性是可读写的,那么子类重写后的属性也必须的可读写的
重写类型属性
- 被
class
修饰的计算类型属性
,可以被子类重写 - 被
static
修饰的类型属性(存储,计算),不可以
被子类重写
属性观察器
- 可以在子类中为父类属性(除了只读计算属性,let属性)增加属性观察器.
class Circle {
var radius: Int {
set {
print("Circle setRadius",newValue)
}
get {
print("Circle getRadius")
return 20
}
}
}
class SubCircle: Circle {
override var radius: Int {
willSet {
print("SubCircle willSetRadius",newValue)
}
didSet {
print("SubCircle didSetRadius",oldValue,radius)
}
}
}
var circle = SubCircle()
circle.radius = 10
//打印结果
Circle getRadius
SubCircle willSetRadius 10
Circle setRadius 10
Circle getRadius
SubCircle didSetRadius 20 20
final
- 被
final
修饰的方法,下标,属性,禁止被重写 - 被
final
修饰的类,禁止被继承