Sobes.tech
Middle

Czy klasa abstrakcyjna może zawierać metodę prywatną i dlaczego?

sobes.tech AI

Odpowiedź od AI

Tak, może.

Prywatna metoda w klasie abstrakcyjnej jest widoczna i dostępna tylko wewnątrz samej klasy abstrakcyjnej. Może to być przydatne do implementacji logiki wewnętrznej, niezbędnej do działania innych metod tej klasy (np. operacji pomocniczych), przy jednoczesnym ukrywaniu tej logiki przed klasami dziedziczącymi.

Metody, które mają być dostępne do nadpisania lub użycia w klasach potomnych, są deklarowane jako protected lub public.

<?php

abstract class AbstractExample {
    abstract public function doSomething();

    private function internalHelper() {
        // Prywatna metoda, widoczna tylko w AbstractExample
        echo "Wykonuję operację wewnętrzną.\n";
    }

    protected function protectedHelper() {
        // Chroniona metoda, widoczna również w klasach dziedziczących
        $this->internalHelper(); // Wywołanie prywatnej metody od wewnątrz
        echo "Wykonuję operację chronioną.\n";
    }
}

class ConcreteExample extends AbstractExample {
    public function doSomething() {
        echo "Robię coś konkretnego.\n";
        $this->protectedHelper(); // Dostęp do metody protected
        // $this->internalHelper(); // Błąd: brak dostępu do prywatnej metody
    }
}

$obj = new ConcreteExample();
$obj->doSomething();