Funciones privadas abstractas

El siguiente código tendrá PHP infeliz porque customMethod () es privado. ¿Por qué es este el caso? ¿La visibilidad está determinada por dónde se declara algo en lugar de definirse?

Si quisiera hacer que customMethod solo sea visible para el código repetitivo en la clase Template y evitar que se anule, ¿lo haría alternativamente protegido y 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();
..

Respuestas a la pregunta(4)

Su respuesta a la pregunta