难以理解如何在扩展类中声明父类的函数?

use*_*637 3 php oop

class Bar{        
    public function test(){
        $this->testPublic();
        $this->testPrivate();
    }

    public function testPublic(){
        echo "Bar::testPublic\n";
    }

    private function testPrivate(){
        echo "Bar::testPrivate\n";
    }        
}

class Foo extends Bar{
    public function testPublic(){
        echo "Foo::testPublic\n";
    }
    private function testPrivate(){
        echo "Foo::testPrivate\n";
    }

}

$myFoo = new Foo();
$myFoo->test();
//Foo::testPublic
//Bar::testPrivate
Run Code Online (Sandbox Code Playgroud)

我在理解这个输出时遇到了很多麻烦.有人能够给我一个明确的简洁解释是什么吗?我正在学习OOP,并想知道如何使用扩展来覆盖父类函数.

zer*_*kms 5

test()方法调用2个方法:

  1. testPublic- 它是一个公共的,所以它被覆盖了Foo.所以Foo::testPublic被称为
  2. testPrivate - 它是一个私人的,所以它只对每个类本身可见.对于调用者方法(它Bar) - 它是一个Bar::testPrivate

所以 - 如果方法是publicprotected- 它可以被覆盖并从祖先/孩子调用; 如果它private- 它不能.