...to w programowaniu obiektowym operacja polegająca na stworzeniu nowej klasy na bazie klasy już istniejącej.
Na przykład, jeśli mamy klasę (w C++):
class Punkt
{
public:
float x,y;
Punkt(float _x, float _y);
virtual void wypisz();
virtual void przesun(float przesuniecie_x, float przesuniecie_y);
};
Załóżmy, że w naszym programie wynikła potrzeba użycia dodatkowej klasy, która różni się od tej jedynie w kilku szczegółach funkcjonalnych. Dzięki dziedziczeniu nie musimy tworzyć takiej klasy od zera, a możemy zamiast tego wprowadzić jedynie konieczne modyfikacje do klasy już istniejącej.
Przykładowo chcemy, by nowa klasa miała dodatkowy składnik:
string nazwa;
a także odpowiednio zmienioną metodę wypisz.
Dziedziczona klasa może zostać zdefiniowana w następujący sposób:
class NazwanyPunkt: public Punkt
{
public:
string nazwa;
NazwanyPunkt(float _x=0,float _y=0,string _nazwa=NULL);
virtual void wypisz();
};
W ten sposób powstała nowa klasa o nazwie
NazwanyPunkt (klasa pochodna, podklasa, potomek) wywodząca się od klasy
Punkt (klasa podstawowa, nadklasa, rodzic).
Bardzo ważna w naszej klasie pochodnej jest pierwsza linijka:
class NazwanyPunkt: public Punkt
Wyrażenie znajdujące się po dwukropku nazywa się listą pochodzenia. W składni języka C++ informuje ona od czego wywodzi się klasa pochodna.
W C++ klasie pochodnej możemy zdefiniować:
- dodatkowe dane składowe (w naszym przykładzie: string nazwa;)
- dodatkowe funkcje składowe (w naszym przykładzie zmieniliśmy funkcję wypisz())
- nową treść funkcji wirtualnej
W innych językach szczegóły dziedziczenia mogą wyglądać odmiennie, np. w CLOS klasa pochodna może wpływać na metody odziedziczone po klasie podstawowej, ogólna zasada dziedziczenia pozostaje jednak taka sama.
Ten sam przykład dziedziczenia zapisany w Javie:
class NazwanyPunkt extends Punkt { }