PHPでの継承について
PHPの継承についての質問です。
PHPではクラスを継承する場合 スーパークラスのpublicとprotectedなメンバを継承すると
いいます。
継承とは、スーパークラスで定義したメンバが
サブクラスで定義されたことと同義である。
という前提で質問します。
ひょっとしたらこの前提も微妙に間違っているかもしれません。
以下の用なコードがあるとします。
<?php
class AClass {
//サブクラスへ継承されるスーパークラスのメソッド
public function superClassPublicMethod(){ //【1】
$this-> subClassPrivateMethod();
}
}
class BClass extends AClass{
public function subClassPublicMethod(){//【2】
$this->subClassPrivateMethod();
}
//継承したスーパークラスで定義されているメソッドからコールするサブクラスで定義したメソッド
private function subClassPrivateMethod(){ //【3】
print __CLASS__;
}
}
$obj = new BClass();
//サブクラスで定義した public なメソッドを実行
$obj->subClassPublicMethod(); //【4】
//スーパークラスから継承したpublic なメソッドを実行
$obj-> superClassPublicMethod();//【5】
?>
コレを実行すると【4】はきちんとBClassという結果が返ってきます。
ところがその下の【5】を実行すると
Fatal error: Call to private method BClass::subClassPrivateMethod() from context 'AClass' in
/usr/local/apache/htdocs/ext06.php on line 9
という実行時エラーが返ってきます。これを読むと、AClassのコンテキスト内ではBClassのprivateなメンバは
コールできませんよ。というエラーですね。そもそもAClassのコンテキストということは、これはAClass内で実行されているということですよね?
ここで、スーパークラスからこのpublicなメソッドは継承しているはずなのになぜ、サブクラスのBCLass内ではなくスーパークラスのAClass内という
エラーが返っているのでしょうか?
継承とは、サブクラスで定義したと同義ではなく、スーパークラスまで内部的にアップキャスト?してコールしにいっているのでしょうか?
詳しい方ご教授ください。
よろしく御願いします。