Dziedziczenie

Przeczytałem w życiu wiele kursów odnośnie programowania w różnych językach, ale tak prostego i szybkiego wyjaśnienia jak to, nie widziałem na żadnej innej stronie dlatego odsyłam do strony http://webhosting.pl . Jak już przeczytacie będziecie wiedzieli co i jak z tymi klasami. Po mojemu to jest tak:

Klasa to słowo określające jakąś rzecz np. samochód, większość samochodów ma 4 koła, 2 lusterka boczne i 2 przednie siedzenia, więc wszytko to co ma takie właściwości można nazwać samochodem. Są też firmy które produkują samochody np. Ford i Opel.  One dziedziczą właściwość po klasie samochód, ponieważ Każdy Opel posiada 4 koła itd. można więc nazwać ich produkt samochodem jedyna co ich różni to logo na tym samochodzie, czyli zdefiniowana jest nowa zmienna logo. Jeśli Opel wyprodukuje samochód tylko z 1 lusterkiem bocznym i nazwie taki samochód Corsa (będzie dziedziczył po klasie Opel), to dalej ich produkt można nazywać Oplem, ale także samochodem, bo Opel dziedziczy po klasie samochód.

Obiekt jest definiowany wtedy, gdy ktoś kupi taki samochód. Jeśli ja kupie Corsę i nazwę ją Bodzio, to zdefiniuję obiekt Bodzio, który jest Samochodem wyprodukowanym przez Opla o modelu Corsa. Mogę także dodać drugie lusterko boczne jeśli mi to odpowiada, zmieniając funkcję definiującą ilość lusterek na 2.

Tak w skrócie można opowiedzieć o klasach, dziedziczeniu i obiektach. A teraz przykład:

<?
class A {
function napis() {
echo "funkcja napis() klasy A<br />";
}
}
class B extends A {
function napis() { echo "funkcja napis() klasy B<br />";
parent::napis(); //wywołujemy funkcje napis() klasy nadrzędnej
}
}
$b = new B;  //tworzymy obiekt klasy B
$b->napis(); //wywołujemy funkcje napis() obiektu B
?>

Wynik można zobaczyć klikając tu:

wyświetli nam się na ekranie:

funkcja napis() klasy B
funkcja napis() klasy A

Jak widać wywołała się funkcja napis() klasy A i B a powinna tylko B, bo w klasie B funkcja napis() jest zdefiniowana, czyli zastąpiona. W samej funkcji napis() klasy B jest wywołanie parent do funkcji napis() dla klasy A i dlatego została wywołana funkcja napis() klasy A.