Почему частные методы не работают с полиморфизмом?

Вид получил проблему с использованием наследования / полиморфизма с частными методами.

Пример:

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.

Я понял, что он работает только так, как я ожидаю, если я удалю «частные» из методов класса, но я бы предпочел использовать их, потому что эти методы нельзя вызывать извне класса. При использовании « private » перед getBlock() specialCmsPage всегда получает объект cmsBlock.

Есть ли способ достичь того, что я хочу использовать « частный »?