Páté cvičení Dědičnost Interface Abstarktní třídy a metody Finální třídy a metody Příklad
Dědičnost dědičnost geometrické těleso čtverec kruh barevný čtverec obvod obsah obvod obsah strana obvod obsah poloměr čtverec kruh obvod obsah strana barva výplně barevný čtverec dědičnost Java cv2
Dědičnost Vztah mezi dvěma (zprostředkovaně více) objekty Vhodný nástroj a postup pro modelování problému Od abstraktnějších pojmů ke konkrétnějším Pravidlo vztahu JE-MÁ JE – adept na dědičnost čtverec JE geometrické těleso MÁ – adept na agregaci čtverec MÁ bod Dědičnost se definuje pomocí klíčového slova extends Java cv2
Dědičnost class Potomek extends Predek { … //tělo třídy Potomek } Každá třída má předka, pokud ho nemá explicitně definovaného, pak dědí z java.lang.Object Přístup na rodiče pomocí super public class Kruh extends GeometrickeTeleso { public int nejakaMetoda() { super.nejakaMetoda(); //zavolani metody predka Java cv2
Dědičnost – problém s konstruktory Při vytváření potomka musí být vždy volán konstruktor předka Pokud na předkovi existuje konstruktor bez parametrů (i implicitní), je vše automaticky Pokud konstruktor předka má alespoň jeden parametr, musí se na první řádce kostruktoru potomka přímo zavolat kostruktor předka pomocí super Java cv2
Interface Java nepodporuje vícenásobnou dědičnost Místo toho zavádí pojem interface Deklarace vlastností (metod), které objekt splňuje (a konstant) Definice interfacu se podobá definici třídy, metody nemají implementaci Rozhraní lze dědit, dokonce i vícenásobně Př.: interface Rozhrani { void metodaRozhrani(); } Java cv2
Implementace Interface Třída může implementovat více rozraní Pak musí implementovat všechny metody definované v rozhraní Definuje se pomocí klíčového slova implements Př.: class NejakaTrida implements NejakeRozhrani Java cv2
Abstraktní třídy a metody Abstraktní metoda je deklarovaná, ale nemá implementaci Třída musí být abstraktní, pokud obsahuje nějakou abstraktní metodu Od abstraktní třídy nelze vytvářet instance Lze tak vynutit implementaci metody v potomcích Př.: abstract class GeometrickeTeleso { abstract int obsah(); } Java cv2
Finální třídy a metody Pokud je metoda označená jako finální, nelze jí překrýt (v potomkovi) Pokud je třída označena jako finální, nelze z ní dědit (vytvářet potomky) Od abstraktní třídy nelze vytvářet instance Lze tak vynutit implementaci metody v potomcích Př.: abstract class GeometrickeTeleso { abstract int obsah(); } Java cv2