/**
属性重写的时候都有哪些限制?
1.属性重写时,只有set方法 , 没有get方法是否可以,
不可以的,我们马上可以看到,set 和 get都必须重写;
2.只读的计算属性是否在重写的时候变成读写计算属性(权利变大);
可以,也就是可以升权。
3.可读写的计算/存储属性是否可以重写为只读的计算属性(权利变小);
不可以,也就是不可以降权。
*/
class Father {
var storeProperty: Int = 0 // 存储属性
var computeProperty: Int { // 计算属性
get {
return 0
}
// set {
// print("In FatherClass: set\(newValue)")
// }
}
}
class Child: Father {
/**
可以将一个父类的存储属性重写成计算属性,
不可以将一个父类的存储属性再重写成存储属性。
*/
override var storeProperty: Int {
get {
return 0
}
set {
print("In ChildClass set: storeProperty with value \(newValue)")
}
}
/**
可以将父类中的技术属性重写,重写的样式也是计算属性
*/
override var computeProperty: Int {
get {
return 10
}
set {
print("In ChildClass set: coputeProperty with value \(newValue)")
}
}
}
let ch = Child.init()
// 通过子类的对象来调用重写后的属性或者方法,肯定会调用子类中的重写版本
ch.storeProperty = 100
ch.computeProperty = 200