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() ?
你不能。当您使用override关键字时,您告诉编译器允许更改子类中继承的方法。这意味着子类实例将不知道重写的超类方法的实现。
即使您将Subclass实例强制转换为Superclass,该实例的实际类型仍然是Subclass,因此如果您这样做(instance as Superclass).method(),它仍然会执行重写的方法。
如果您希望能够从您的Subclass实例调用超类实现,您需要创建另一个函数 forSubclass而不是覆盖methodfrom Superclass。