dědictví je klíčový koncept objektově orientovaného programování (OOP) a často se považuje za jeden z pilířů zvyšování efektivity. V tomto tutoriálu prohloubíš své porozumění dědictví v Javě. Naučíš se, jak pracovat s modifikátory přístupu, používat konstruktory a jakou roli hraje enkapsulace v dědictví.
Hlavní poznatky
- Dědictví umožňuje dědění vlastností a metod třídy.
- Modifikátor přístupu private omezuje přístup k proměnným nebo metodám, zatímco protected umožňuje rozšířený přístup v rámci tříd, které dědí z původní třídy.
- Konstruktory musí být volány v podtřídě, aby byly objekty správně instanciovány.
- Rozhraní metod lze generalizovaně používat, pokud máš více specifických tříd.
Podrobný návod
Modifikátory přístupu: protected vs. private
Pokud v třídě jako Vozidlo deklaruješ proměnnou (např. barva) jako protected, můžeš tuto proměnnou v odvozené třídě (např. Auto) použít přímo. Pokud však proměnnou deklaruješ jako private, v podtřídě na ni nelze přímo přistupovat.

To konkrétně znamená, že přístup k private proměnným je možný pouze přes Settery a Gettery.
Příklad ukazuje, že musíme použít setBarva a getBarva, abychom získali přístup k private proměnné barva.

Pokud je proměnná deklarována jako protected, můžeš k ní jednoduše přistupovat v rámci třídy Auto a měnit její hodnotu.
Použití konstruktorů v dědictví
Při definici podtřídy musíš zajistit, aby byl konstruktor nadtřídy správně volán.

To zajišťuje, že barva je správně inicializována při vytváření objektu Auto.

Dbej na to, abys v podtřídě definoval konstruktor, který vhodně předává parametry nadtřídy.
Dědění a volání metod
Dvě třídy, Vozidlo a Auto, ti umožňují použití obecných proměnných a metod. Pokud v třídě Vozidlo definuješ metodu, můžeš tuto metodu také použít v třídě Auto, aniž bys ji musel znovu psát.

Zde je volána metoda vozidloBarvaVydat a vypisuje hodnotu barvy, kterou poskytuje metoda getBarva.
Omezení při přístupu k metodám
Pokud se pokusíš zavolat metodu v podtřídě, která není pro tuto třídu dostupná, dostaneš chybu kompilace. V našem příkladu musí být předán objekt Vozidla, aby byla metoda getBarva zavolána.

To prakticky znamená, že si musíš zajistit, že metoda odpovídá tvému typu dat, než ji zavoláš. Můžeš tedy předat kolo, auto nebo obojí metodě, která očekává pouze objekty Vozidla.
Příklad volání instančních metod ve statických kontextech
Všimni si, že ve statických metodách (static) nelze použít klíčové slovo this, protože se nevztahuje na konkrétní instanci. V takových případech bys měl možná použít jinou metodu nebo přepracovat logiku.

Tohle volání správně vypíše barvu pro objekt meinAuto.
Souhrn - Dědictví v Javě: Průvodce pro začátečníky
Dědictví je důležitý koncept v programování s Javou, který ti pomáhá modularizovat a znovu používat kód. V tomto tutoriálu ses naučil základy modifikátorů přístupu, konstruktorů a volání metod v souvislosti s dědictvím.
Často kladené otázky
Jak mohu přistupovat k private proměnným v podtřídě?K private proměnným v podtřídě nelze přistupovat přímo. Použij Getter- a Setter-metody.
Jaký je rozdíl mezi protected a private?protected umožňuje přístup v podtřídě a ve stejném balíčku, zatímco private je přístupný pouze uvnitř vlastní třídy.
Musím definovat konstruktory v podtřídě?Ano, pokud jsi upravil konstruktor nadtřídy, musíš také odpovídajícím způsobem definovat konstruktory v podtřídě.
Mohu volně přepisovat metody nadtříd v podtřídách?Ano, můžeš přepisovat metody, které nejsou označeny jako final nebo static, v podtřídě pro implementaci specifického chování.