覆盖父方法得到

时间:2015-07-01 17:57:47

标签: php

为什么下面的代码:

class A {   
    public function foo() {}
}

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

生成致命错误:

class A {
    private function foo() {}   
}

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

虽然文档中没有说“如果孩子没有看到父母的私人方法,孩子不能覆盖他们”?

2 个答案:

答案 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::fooprivate,而只有public

答案 1 :(得分:0)

一切都与语义有关。在B类方法foo的第一个例子中,您可以使用 parent :: foo()调用父类方法foo ,但他是私人。