\b;Słowo kluczowe \c;extends\n;
To słowo kluczowe używane jest przy definicji \c;\l;klasy\u cbot\class;\n; gdy chcemy odziedziczyć elementy innej klasy. Rozszerzająca klasa jest zwykle nazywana rodzicem lub bazą, rozszerzana klasa nazywana jest dzieckiem.

\t;Przykład
\c;
\s;public class Rodzic
\s;{
\s;	void foo()
\s;	{
\s;		message("foo");
\s;	}
\s;}
\s;
\s;public class Dziecko extends Rodzic
\s;{
\s;	void bar()
\s;	{
\s;		message("bar");
\s;	}
\s;}
\s;
\s;extern void object::Test()
\s;{
\s;	Dziecko dziecko();
\s;	dziecko.foo(); // Will show "foo"
\s;	dziecko.bar(); // Will show "bar"
\s;}
\n;

\b;Dziedziczone elementy
Tylko \c;\l;publiczne\u cbot\public;\n; i \c;\l;chronione\u cbot\protected;\n; elementy są dziedziczone. \c;\l;Prywatne\u cbot\private;\n; elementy są niedostępne nawet dla klas podrzędnych, mimo że mogą być dostępne niebezpośrednio poprzez metody dziedziczone.

Konstruktory i destruktory nie są dziedziczone, jednakże mogą być nadpisane.

\b;Nadpisywanie metod
Dziedziczone metody mogą być nadpisane (ponownie zdefiniowane) w definicji klasy podrzędnej. Przykład:
\c;
\s;public class Rodzic
\s;{
\s;	void foo()
\s;	{
\s;		message("foo");
\s;	}
\s;}
\s;
\s;public class Dziecko extends Rodzic
\s;{
\s;	void foo()
\s;	{
\s;		message("bar");
\s;	}
\s;}
\s;
\s;extern void object::Test()
\s;{
\s;	Dziecko dziecko();
\s;	dziecko.foo(); // Wyświetli "bar"
\s;}
\n;
Metody rodzica mogą być wywoływane wewnątrz nadpisywanej metody używając słowa kluczowego \c;\l;super\u cbot\super;\n;.

\b;Polimorfizm
\c;\l;Odniesienie\u cbot\pointer;\n; typu klasy nadrzędnej może wskazywać na obiekt klasy podrzędnej. Jednak taki wskaźnik nie może zostać użyty do uzyskania dostępu do elementów klasy podrzędnej. Żeby uzyskać dostęp do elementów klasy podrzędnej, należy upewnić się, że odniesienie do klasy nadrzędnej rzeczywiście wskazuje na obiekt klasy podrzędnej. W takim przypadku może on zostać bezpiecznie skopiowany do wskaźnika typu klasy podrzędnej który ma dostęp do elementów klasy podrzędnej.

\t;Przykład
\c;
\s;public class Rodzic
\s;{
\s;	void foo()
\s;	{
\s;		message("foo");
\s;	}
\s;}
\s;
\s;public class Dziecko extends Rodzic
\s;{
\s;	void foo()
\s;	{
\s;		message("bar");
\s;	}
\s;	void bar()
\s;	{
\s;		message("foo bar");
\s;	}
\s;}
\s;
\s;extern void object::Test()
\s;{
\s;	Rodzic ludzie[2];
\s;	ludzie[0] = new Rodzic();
\s;	ludzie[1] = new Dziecko();
\s;	for (int i = 0; i < 2; ++i)
\s;	{
\s;		ludzie[i].foo();
\s;	}
\s;	//ludzie[1].bar(); // Błąd
\s;	Dziecko dziecko = ludzie[1];
\s;	dziecko.bar(); // OK
\s;}
\n;

\b;Wielokrotne dziedziczenie
Klasa nie może mieć wielu klas nadrzędnych, jednakże klasa nadrzędna może mieć wiele klas podrzędnych.

\t;Zobacz również
\c;\l;class\u cbot\class;\n;, \c;\l;public\u cbot\public;\n;, \c;\l;private\u cbot\private;\n;, \c;\l;protected\u cbot\protected;\n;, \c;\l;new\u cbot\new;\n;, \c;\l;reference\u cbot\pointer;\n;, \c;\l;this\u cbot\this;\n;, \c;\l;super\u cbot\super;\n;
\l;Programowanie\u cbot;, \l;typy\u cbot\type; i \l;kategorie\u cbot\category;.
