方法重写和继承


Method overiding and inheritance

下面的代码:

class A {
    public function foo() {}
}
class B extends A {
    private function foo() {}
}

得到一个错误:"对B::foo()的访问级别必须是公共的(如在类A中)"

为什么我不能将B类中的A类foo方法重写为private?

方法重写中访问指定器的规则

唯一的规则是:

"子类重写方法的访问权限不能比超类方法弱"。

class A {
    public function foo() {}
}
class B extends A {
    private function foo() {}
}

不能用私有函数覆盖公共函数,如果要覆盖函数,则两者都必须是公共函数。