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/