为什么私有方法不能使用多态?

时间:2014-01-03 16:20:13

标签: php object inheritance polymorphism private

使用私有方法的继承/多态性有点问题。

示例:

class cmsPage{

   private function getBlock(){
       $block = new cmsBlock();
       return $block
   }

   function createBlock(){
       $block = $this->getBlock();
       $block->save();
   }
   //... do various things
}


class specialCmsPage extends cmsPage{

   private function getBlock(){
       $block = new specialCmsBlock();
       return $block
   }

}

当然我希望specialCmsPage继承cmsPage中的所有方法。函数getBlock()应该确保添加到specialCmsPage的所有内容块都是specialCmsBlock类型而不是cmsBlock。

我发现,如果我从类方法中删除“私有”,它只会按照我的预期方式工作,但我更愿意使用这些,因为这些方法不应该从类外部调用。 在getBlock()方法前面使用“私有”时,specialCmsPage始终会收到一个cmsBlock对象。

有没有办法用“私人”达到我想要的效果?

1 个答案:

答案 0 :(得分:0)

也许您正在寻找protected私有成员仅对其声明的类可见。 protected 成员对类及其后代可见。