swift - 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 中是如何工作的吗?在私有属性的情况下,它是不是很特别?
解决方案
推荐阅读
- mysql - 如何将ip地址插入mysql
- html-framework-7 - Framework7 已经初始化(React)
- qt5 - bitbake:如何恢复编译
- python-3.x - 如何知道用户是否在 wxPyhton 中更改了 AuiNotebook 的选项卡顺序?
- php - 带有准备好的语句的 mysqli_stmt_num_rows 不返回行数
- asp.net-mvc - 从特定索引实体框架的会话中删除
- .net - 无法打破 foreach 循环
- python - 用python计算价值增加的总和
- javascript - 尽管凭据错误,但发出休息后请求总是返回 200
- c - 如何检查字符串是否包含某个字符?