如何调用超级方法?

and*_*ewz 5 inheritance overriding swift

class Subclass : Superclass {
    override func method() { /* ... */ }
}

let instance = Subclass()
instance.method() // I want to call Superclass.method() not Subclass.method()
Run Code Online (Sandbox Code Playgroud)

鉴于这种情况,我该如何调用 Superclass.method() ?

Dáv*_*tor 6

你不能。当您使用override关键字时,您告诉编译器允许更改子类中继承的方法。这意味着子类实例将不知道重写的超类方法的实现。

即使您将Subclass实例强制转换为Superclass,该实例的实际类型仍然是Subclass,因此如果您这样做(instance as Superclass).method(),它仍然会执行重写的方法。

如果您希望能够从您的Subclass实例调用超类实现,您需要创建另一个函数 forSubclass而不是覆盖methodfrom Superclass

  • 这行得通吗?func superMethod() { super.method() } (2认同)
  • @andrewz 是的,这就是我的建议 (2认同)