这里是问题,我想了解一下init是如何工作的,子类的属性存储在哪里
答案 0 :(得分:0)
这里是一个示例,为了举例说明原因之一,假设您具有以下类定义:
class Base {
init() {
sayHello()
}
func sayHello() {
print("Hello from base")
}
}
class Derived: Base {
let name: String
override init() {
// no initialization of own properties, just call super()
super.init()
}
override func sayHello() {
print("Hello from \(name)")
}
}
基本上,基类的初始化调用sayHello
,该方法在子类中被覆盖。现在,调用super.init()
会导致覆盖方法被调用,这又需要使用name
属性,该属性此时尚未初始化。
在调用super.init
之前初始化所有子类存储的要求是为了确保对象有效性,然后再对它调用任何可能的操作。