Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift:从超类访问自己的属性_Swift_Class_Inheritance - Fatal编程技术网

Swift:从超类访问自己的属性

Swift:从超类访问自己的属性,swift,class,inheritance,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() }

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

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.element
时,将获取子类的-属性

我的超类如何访问它自己的属性


为了澄清我的问题:我的子类使用
super.add(element)
调用一个超类方法。超类方法访问存储的
self.element
。但是,它读取子类的属性,而不是读取它自己的(超类)'
self.elementsStored
。但是我想访问原始属性,而不是覆盖的属性

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

public class baseClass {
     private var internalElementsStored = 0

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

         set {
             internalElementsStored = newValue
         }
     }
}

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

public class baseClass {
     private var internalElementsStored = 0

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

         set {
             internalElementsStored = newValue
         }
     }
}

存储的
element
self.element
不起作用吗?我不太清楚你最后那个问题是什么意思。你能举个例子吗?不,每当我使用存储的
self.elements
,就会打印“获取子类属性”一行;所以它访问子类'one'。好的,那么你想访问子类实例中的超类属性吗?我编辑了我的问题。英语不是我的母语,所以有时解释我的问题有点困难;抱歉,像这样重写属性或方法的整个要点是,当您通过对超类的引用访问它时,您将获得被重写的子类行为。动态多态性依赖于这种行为。这里没有两个版本的属性,所以期望子类“读取它自己的”属性只是一个思维上的错误。如果不希望子类能够重写属性,则需要在超类中将其设置为
final
。您可能需要重新考虑您的设计。存储的
elements
self.elements
不起作用吗?我不太清楚你最后那个问题是什么意思。你能举个例子吗?不,每当我使用存储的
self.elements
,就会打印“获取子类属性”一行;所以它访问子类'one'。好的,那么你想访问子类实例中的超类属性吗?我编辑了我的问题。英语不是我的母语,所以有时解释我的问题有点困难;抱歉,像这样重写属性或方法的整个要点是,当您通过对超类的引用访问它时,您将获得被重写的子类行为。动态多态性依赖于这种行为。这里没有两个版本的属性,所以期望子类“读取它自己的”属性只是一个思维上的错误。如果不希望子类能够重写属性,则需要在超类中将其设置为
final
。你可能需要重新考虑你的设计。