为什么下面的代码:
class A {
public function foo() {}
}
class B extends A {
private function foo() {}
}
生成致命错误:
class A {
private function foo() {}
}
class B extends A {
public function foo() {}
}
虽然文档中没有说“如果孩子没有看到父母的私人方法,孩子不能覆盖他们”?
答案 0 :(得分:1)
让我们分析一下你的内容:
class A {
private function foo() {}
}
class B extends A {
public function foo() {}
}
此类 A 有一个私有方法,因为它是私有的,所以在课程 B 中看不到。因此,在课程 B 中,您可以使用同名创建方法。它不是重写,它只是创建具有相同名称的方法。
在这个例子中:
class A {
public function foo() {}
}
class B extends A {
private function foo() {}
}
方法A::foo
是公开的,您可以在 B 类中覆盖它。但是因为它是public
,所以儿童方法的可见性不应该比父母方法更严格。因此,您不能B::foo
为private
,而只有public
。
答案 1 :(得分:0)
一切都与语义有关。在B类方法foo的第一个例子中,您可以使用 parent :: foo()调用父类方法foo ,但他是私人。