Swift:从超类

时间:2016-02-07 00:58:27

标签: swift class inheritance

我有一个具有此属性的超类:

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而是读取子类的属性。但我想访问原始属性而不是被覆盖的属性。

1 个答案:

答案 0 :(得分:2)

只需在基类中创建一个私有变量,以用作可继承属性的存储。任何其他方式都会破坏多态性。

public class baseClass {
     private var internalElementsStored = 0

     private(set) public var elementsStored : Int {
         get {
             return internalElementsStored
         }

         set {
             internalElementsStored = newValue
         }
     }
}