父类的属性被子类重写了吗??

为什么把父类的$sal改成public或者private会导致结果不一样呢?子类里面调用父类的getSal()后不是直接就return了吗? 不跟子类的$sal发生关系吧 为什么得到的结果是5000呢 有点想不明白这个过程 大家能给解释一下吗?(我用手机发的贴 格式看起来可能有点乱 见谅)

<?php
class employee { 
    public $sal=3000; 
    public function getSal(){ 
        return $this->sal; 
    } 
} 
class Manager extends employee { 
    protected $sal=5000; 
    public function getParentSal() { 
        return parent::getSal(); 
    } 
} 

$manager = new Manager(); 
echo "PHP ".phpversion()."<br>"; 
echo $manager->getSal(); 
echo "<br>"; 
echo "parent's \$sal ".$manager->getParentSal(); 
?> 
阅读 3.2k
1 个回答

父类 $sal为public时,子类继承的时候将其覆盖,结果为5000
父类 $sal为private时,子类没有继承,而是相当于添加了属性$sal,在调用parent::getSal()时返回的是父类的私有属性$sal的值,3000
并且 子类的重写的属性的访问权限不能小于父类

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题