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
。你可能需要重新考虑你的设计。