14. 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/