B 类是 A 类的子类 (B : A)
我将类初始化为 B.init()
当在 A 中调用时,覆盖 method(
) 永远不会被调用,除非我使用强制转换:
class A {
...
self.method() //A method called
(self as! B).method() //B method called
}
为什么?
由于我将实例初始化为 B,我希望它会调用重写方法,但事实并非如此,除非我使用强制转换。
最佳答案
我认为你在幕后有一些错误。我构建了您的示例,它按预期工作:
class A {
func method() {
print("A")
}
func check() {
method()
(self as? B)?.method()
}
}
class B: A {
override func method() {
print("B")
}
}
其他地方:
let b = B()
b.check()
//B
//B
关于swift - 未调用重写方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38996783/