unções privadas abstrat

O código a seguir deixará o PHP insatisfeito por customMethod () ser privado. Por que esse é o caso? A visibilidade é determinada por onde algo é declarado em vez de definido?

Se eu quisesse tornar customMethod visível apenas para o código padrão na classe Template e impedir que ele fosse anulado, eu alternativamente o tornaria protegido e final?

Template.php:

abstract class Template() {
    abstract private function customMethod();

    public function commonMethod() {
        $this->customMethod();
    }
}

CustomA.php:

class CustomA extends Template {
    private function customMethod() {
       blah...
    }
}

Main.php

...
$object = new CustomA();
$object->commonMethod();
..

questionAnswers(4)

yourAnswerToTheQuestion