継承されたメソッドのアクセス修飾子で、親か子のどちらが呼ばれるか変わる件

タイトルが馬鹿ですが、うまく説明できなんだ。

private

<?php
class super
{
	public function __construct()
	{
		$this->p();
	}

	private function p()
	{
		print "super<br />";
	}
}

class sub extends super
{
	private function p()
	{
		print "sub<br />";
	}
}

$o = new super(); //super
$o = new sub();   //super

protected(public)

<?php
class super
{
	public function __construct()
	{
		$this->p();
	}

	protected function p()
	{
		print "super<br />";
	}
}

class sub extends super
{
	protected function p()
	{
		print "sub<br />";
	}
}

$o = new super(); //super
$o = new sub();   //sub