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: 2024-06-30