我有一个具有此属性的超类:
private(set) public var elementsStored = 0
现在我有一个子类使超类线程安全,并覆盖属性,如下所示:
override public var elementsStored: Int {
get {
print("Getting sub-class-property.")
self.lock.lock()
defer { self.lock.unlock() }
return super.elementsStored
}
set (newValue) {
print("Setting sub-class-property.")
self.lock.lock()
defer { self.lock.unlock() }
super.elementsStored = newValue
}
}
当我在超类中调用self.elementsStored
时,会获取子类 -property。
我的超类如何访问拥有属性?
澄清我的问题:我的子类使用super.add(element)
调用超类方法。超类方法访问self.elementsStored
。然而,它不是读取它自己的(超类')self.elementsStored
而是读取子类的属性。但我想访问原始属性而不是被覆盖的属性。
答案 0 :(得分:2)
只需在基类中创建一个私有变量,以用作可继承属性的存储。任何其他方式都会破坏多态性。
public class baseClass {
private var internalElementsStored = 0
private(set) public var elementsStored : Int {
get {
return internalElementsStored
}
set {
internalElementsStored = newValue
}
}
}