没有调用Overriden方法?

时间:2016-08-17 12:32:58

标签: swift

B类是A类(B : A)

的子类

我将课程初始化为B.init()

在A中调用时,除非我使用强制转换,否则永远不会调用覆盖method(

class A {
    ...
    self.method() //A method called
    (self as! B).method() //B method called
}

为什么?

由于我将实例初始化为B,我希望它调用overriden方法,但这不是真的,除非我使用强制转换。

1 个答案:

答案 0 :(得分:0)

我认为你背后有一些错误。我构建了您的示例,它按预期工作:

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