Przesłanianie składowych klasy

Jeżeli w klasie potomnej istnieją takie same nazwy pól lub metod co w klasie bazowej to metoda lub pole klasy bazowej zostanie przesłonięte metodą lub polem klasy potomnej.

Jeżeli metoda w klasie A nosi nazwę obliczaj(), a w klasie B rozszerzającej klasę A istnieje metoda o tej samej nazwie, to mając obiektA klasy bazowej A i obiektB klasy B uzyskamy różne działanie podczas wywoływania metody obliczaj().

Należy tu zaznaczyć, że można z klasy potomnej wywołać metodę klasy bazowej, stosując składnię:

parent::nazwa_metody(parametry)

Zobrazujmy powyższy wywód przykładem.

Przykład 1

<?php
<?php
// --- klasa bazowa
class KlasaBaza
{
public function napisz()
{
echo 'Tekst pochodzi z klasy bazowej';
}
}
// --- Klasa potomna
class KlasaPotomna extends KlasaBaza
{
public function napisz()
{
echo '<br>';
parent::napisz();
echo ' - wywołany z klasy potomnej...';
echo '<br>Tekst pochodzi z klasy potomnej';
}
}
$objA=new KlasaBaza();
$objB=new KlasaPotomna();
echo $objA->napisz();
echo '<br>';
echo $objB->napisz();
echo '<br>';
?> ?>

Klasy i metody finalne

Jeżeli nie chcemy, aby metoda w klasie bazowej mogła być przesłaniana przez metodę w klasie pochodnej, to taką metodę, a nawet klasę oznaczamy jako finalną za pomocą słowa kluczowego final.

Klasa finalna:

final class Klasa {...}

Metoda finalna:


class Klasa {
final public function nazwa_metody {...}
}

Próba przesłonięcia klasy albo metody finalnej zakończy się błędem.

Klasy i metody abstrakcyjne

Jeżeli nie chcemy, aby można było utworzyć obiekt na podstawie utworzonej klasy, deklarujemy ją jako abstrakcyjną za pomocą słowa kluczowego abstract.

Klasa abstrakcyjna:

abstract class Klasa {...}

Metoda abstrakcyjna w klasie abstrakcyjnej (wyłącznie):


abstract class Klasa {
abstract public function nazwa_metody {...}
}

Próba utworzenia obiektu w oparciu o klasę abstrakcyjną zakończy się błędem.

Uwaga! Jeżeli zadeklarujemy metodę jako abstrakcyjną, nie może ona wówczas zawierać ciała, czyli kodu wykonalnego.

Po co tworzyć klasy abstrakcyjne? Klasy i metody abstrakcyjne służą do budowy schematów, wzorców, konspektów, szkieletów, które są obudowywane dopiero w klasach rozszerzających klasę abstrakcyjną. Mówiąc krótko budując klasę abstrakcyjną budujemy pewien schemat. Na podstawie tego schematu budujemy pochodną klasę własną (rozszerzającą klasę abstrakcyjną), w niej zawieramy pełną implementację kodu, zgodną z implementacjami określonymi w klasie bazowej. Dopiero teraz możemy utworzyć obiekt na bazie klasy pochodnej.





© medianauka.pl, 2021-12-03, A-4292
Data aktualizacji artykułu: 2021-12-04



©® Media Nauka 2008-2023 r.