JAVA - Dědičnost, balíčky a rozhraní
Základy dědičnosti, konstruktory v dědičnosti, přepisování metod (polymorfizmus), abstraktní metody, klíčové slova public, private, protected a final, balíčky, rozhraní a jejich implementace.
Základy dědičnosti
Jeden z hlavních principů OOP. Jeho základní myšlenka spočívá v následujícím principu: každá třída má svého předchůdce, po kterém dědí veškeré proměnné a metody
Chceme-li dědit z nějaké třídy, použijeme slovo extends mezi jménem třídy a jménem třídy, ze které dědíme.
Nejvyšší třídou je třída Object. Ta je základem všech tříd (i těch, které nedědí z ničeho)
Příklad:// třída Osoba dědí od třídy Object
public class
Osoba {
public String
jmeno;
public
Osoba(String
jmeno) {
this.jmeno =
jmeno;
}
}
// třída Zamestnanec dědí od třídy Osoba
public class
Zamestnanec extends
Osoba {
public int
plat;
public
Zamestnanec(String
jmeno,
int
plat) {
super(jmeno);
this.plat =
plat;
}
}
Konstruktory v dědičnosti
V konstruktoru Zaměstnance používáme metodu super(). Do té vložíme data, potřebné v kontruktoru nadřazené třídy; Osoba potřebuje v kontruktoru jméno -> do argumentů super() dáme jméno.
Přepisování metod (polymorfizmus)
Polymorfizmus zde funguje stejně jako v rámci jedné třídy. Pokud funkcionalitu metody nezměníme, bude fungovat jako v nadřazené třídě. Přepíšeme-li ji, bude mít funkci novou.
Po přepsání určité metody je možné zavolat původní metodu pomocí
klíčového slova super.
super.nazevMetody();
Abstraktní metody
Java umožňuje vytvořit něco jako “šablonovou třídu”, ze které budeme dědit.
V takové - abstraktní - třídě jsou zapsané abstraktní metody,
jejich parametry a návratové typy. Tyto metody musíme po dědění
v jiné třídě implementovat; dát jim funkcionalitu.
abstract class
AbstraktniTrida {
public abstract int
metoda(int
cislo1, int
cislo2);
}
class
JinaTrida extends
AbstraktniTrida {
public int
metoda(int
cislo1, int
cislo2){
// tělo metody
}
}
Klíčové slova public, private, protected a final
Těmito klíčovýmy slovy mohou být označeny proměnné a metody.
Modifikátory přístupu (public, protected, private) určují viditelnost proměnných a metod ve vztahu k ostatním třídám.
public
Proměnná nebo metoda je viditelná v celém projektu. Jze ji zavolat nebo k ní přistoupit kdekoliv.
protected
Přoměnná nebo metoda je viditelná v celém package(balíčku), kde je definována. Navíc z ní lze dědit i v jiných balíčcích.
bez modifikátoru
Proměnná nebo metoda je viditelná v celém package(balíčku), kde je definována. V jiných balíčcích je ale nepřístupná.
private
Proměnná nebo metoda je viditelná pouze ve třídě, kde je definována.
final
Používá se pro znemožnění proměnné nebo metodě být přepsána. Hodnota takové proměnné je neměnná. Tělo takové funkce také nejde změnit/přepsat; je finální.
Balíčky
Každý .java soubor musí patřit do nějakého balíčku. Deklaraci o
jaký balíček se jedná může mít soubor jen jednu, a to na
začátku.
package nazev_balicku;
Balíčky pak můžeme přidávat/importovat:
import java.util.Scanner;
Buď uvedeme přímo třídu kterou chceme importovat, nebo pomocí
symbolu hvězdičky vybereme všechny.
import java.util.*;
Rozhraní a jejich implementace
Rozhraní je alternativa k abstraktní třídě. Výhoda je, že jedna třída může implementovat více rozhraní (interface).
public interface
IPtak {
void
pipni();
void
dychej();
}
public interface
IJester {
void
kousni();
}
public class
PtakoJester
implements
IPtak,
IJester {
// implementování metod
}
Zdroje
https://www.interval.cz/clanky/naucte-se-javu-tridy-a-objekty-2/ https://www.algoritmy.net/article/23665/Dedicnost-12 https://beginnersbook.com/2013/05/java-access-modifiers/
Kvíz
BETAJaké klíčové slovo se v Javě používá pro dědičnost?
Ke konstruování logického rodokmenu, kdy podtřída rošiřuje chování nadtřídy, zapisuje v Javě vývojář do definice klíčové a spojující slibové slovo `extends` za mateřskou podstatu rozšiřujicího bloku (např. `class Pes extends Zvire`).
Co je to polymorfismus?
Mnohotvárnost vycházející ze síly dědičnosti, díky níž kompilátor pro centrální rodičovskou funkci typu „VzdejZvyk()“ u odlišných proměnných dětí (Pes, Kočka) inteligentně zavolá buď přepsaný kód jejich „štěkání“ anebo „mňoukání“ pod touž hlavičkou volání.
Co je to rozhraní (interface) v Javě?
Průzračný smluvní kontrakt a zcela obnažený nevypreparovaný soupis metod, jehož prázdné funkce figurují jako nařízení: Každá třída, která ze mě skrze interface slib čerpá identitu, se striktně zavazuje k tomu, že veškerá svá rozhraní ve vlastním kódu povinně obslouží plným funkčním tělem.
Jaké klíčové slovo se používá pro implementaci rozhraní?
Pro smluvní vzetí slibovaných podpisů funkcí z Interface bloku do naší aktuální formy třídy se do záhlaví kódu napíšete deklaraci přes kódově slibující slovo pro implementaci – např. slibovací vazbu pod `implements NejakyInterface`.
Co je abstraktní třída v Javě?
Zanechává si chování normální ucelené třídy včetně vyřešených kódů, ale vnesením prázdných abstraktních metod se její forma úmyslně zakáže plně seskládat (přes `new`), dokud se aspoň jeden oddaný potomek nerozhodne a neodpracuje do plné logiky ony zbylé abstraktní prázdné části.
Jak se v Javě volá konstruktor nadtřídy?
Během paměťového oživování odvozeného instančního potomka je z logiky u programování ihned neustále poviností zaktivovat prvně stavení nadtřídního základu svého mateřského rodu. Povel se vykoná zavoláním obsluhy dat zevnitř dítěte skrze kódové slůvko `super()`, patřicí prarodiči v hierarchii.
Co dělá klíčové slovo `final` u třídy v Javě?
U proměných klíčové slovo `final` vytváří navždy neoblomné konstanty. Jeho konzolové dosazení přímo před psanou deklaraci celé strukturované Třídy však zajistí zřetelné totální uzamčení rodokmenů, čímž už navždy absolutně znemožní případným dědicům kód přebírat rozšířovaním skrze funkci `extends`.
Co je to přepisování metod (overriding)?
Úkon v němž si podtřída dovedně přepíše tu již původní, zděděnou implementaci starého rodiče. Vyžaduje pro úspěch striktní zachování původního formátovacího jména i shodného počtu vstupních argumentům (pro kompilér s typickým zobrazení navrhované verifikátkové značku anotace `@Override` nad kódem).
Co je balíček (package) v Javě?
Důležitá hierarchická a stromová vizuální organizace projektů třídících obsáhlejší vývoj pomocí složek pro oddělení kontextu prací (namespace). Tím pádem předejdete konfliktům přes logické zamezení i když sdílíte stejné obsažné jméno souboru u několika stovek class souborů pro Javu přes celý projekt.
Jaká třída je nadtřídou všech tříd v Javě?
Z vnitřní nezvrátitelné a posvátné základní stavební kostry interpretovaného jádra uvnitř virtuálních strojů Javy potajmu naprosto všechny uživatelem nově vypisované Třídy dědí skrytě i od počátku prapůvodního základu kmenovou nadtřídu s označením `java.lang.Object` s vlastnostmi jako jsou `toString`.