首页 > 解决方案 > Swift 中的存储属性覆盖 - 私有与非私有

问题描述

class A {

}

class R {
    let foo: A

    init(foo: A) {
        self.foo = foo
    }

    func printIt() {
        print(self.foo)
    }
}


class AA: A {

}

class RR: R {
    let foo: AA

    init(foo: AA) {
        self.foo = foo
        super.init(foo: foo)
    }
}

如果我尝试编写上面的代码,Swift 编译器会给我一个错误Cannot override with a stored property 'foo',但如果我 make fooprivate

class A {

}

class R {
    private let foo: A

    init(foo: A) {
        self.foo = foo
    }

    func printIt() {
        print(self.foo)
    }
}


class AA: A {

}

class RR: R {
    private let foo: AA

    init(foo: AA) {
        self.foo = foo
        super.init(foo: foo)
    }
}

Swift 编译器不会抛出错误,并且可以完美编译而不会出现任何错误。此外,我不需要在override这里使用关键字,如果我这样做,Swift 编译器会抛出错误并说Property does not override any property from its superclass.

有人可以详细解释一下继承和覆盖在 Swift 中是如何工作的吗?在私有属性的情况下,它是不是很特别?

标签: swiftinheritance

解决方案


推荐阅读