swift:如何将超类中的公共方法覆盖为子类中的私有方法

芮星晨*_*芮星晨 9 inheritance swift

我有一个超级班

class Father {
    public func doSomething() {
    } 
}
Run Code Online (Sandbox Code Playgroud)

我想要这个儿童班

class Child: Father {
    private override func doSomething() {
    }
}
Run Code Online (Sandbox Code Playgroud)

但Xcode说

重写实例方法必须与它覆盖的声明一样可访问

那么,如何覆盖超类中的公共方法是子类中的私有方法

谢谢

Pau*_*w11 12

你不能因为这会违反Liskov替代原则.

实质上,任何可以在超类实例上运行的代码也必须能够在子类的实例上运行.

所以,如果其他一些类有一个方法

class Unrelated {
    func operateOnAThing(_ someThing:Father) {
        someThing.doSomething()
    }
}
Run Code Online (Sandbox Code Playgroud)

当你执行以下操作时,它仍然需要工作:

let aChild = Child()

unrelatedInstance.operateOnAThing(aChild)
Run Code Online (Sandbox Code Playgroud)

如果该doSomething方法在Child类中具有更严格的访问权限,那么您将收到运行时错误.为了防止这种情况,您不能在子类中使访问更具限制性.