2016-06-01 42 views
1

例コード1 [プライベート保護及び公共VS]:印刷クラス継承PHP

<?php 
class People 
{ 
    private function status() {return __METHOD__;} 
    public function Sleep(){ 
     echo $this->status().'<br />'; 
    } 
} 
class Programmer extends People 
{ 
    private function status() {return __METHOD__;} 
} 
$obj = new Programmer(); 
$obj->Sleep(); 
?> 

People::status

コード例2:印刷

<?php 
class People 
{ 
    protected function status() {return __METHOD__;} 
    public function Sleep(){ 
     echo $this->status().'<br />'; 
    } 
} 
class Programmer extends People 
{ 
    protected function status() {return __METHOD__;} 
} 
$obj = new Programmer(); 
$obj->Sleep(); 
?> 

Programmer::status

privateとprotectedの修飾子メソッドではすべて異なります。

なぜ最初のケースで私はPeople::statusを得ますか?なぜ私はProgrammer::statusを得ていないのですか?

私に説明してください、私はこの瞬間を理解していません。

+1

'People'は' Programmer'プライベートメソッドにアクセスできないためです。 –

+0

なぜですか?私はPeopleクラスを継承しています - その意味はプログラマクラスの 'sleep()'です – MaximPro

+1

保護クラスとパブリックメソッド/変数だけが、拡張クラスが継承できます。 – vher2

答えて

3

最初場合Sleep方法はまだのみオブジェクトのPeople部分内に存在し、それがオブジェクトのprivateProgrammerにおける一部であるため、Programmer::statusにアクセスし、それが上書きされ利用可能ではなく、その名前を持つ別の方法を持つことができないので、 People::status。第二の場合protected

People::status

を上書きするProgrammer::statusを可能はい、このように、同じ名前の2つの方法が一つのオブジェクトに存在することが可能であるが、唯一の同じクラス定義のメソッドに見える各。