我有一个超级班
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类中具有更严格的访问权限,那么您将收到运行时错误.为了防止这种情况,您不能在子类中使访问更具限制性.
| 归档时间: |
|
| 查看次数: |
2372 次 |
| 最近记录: |