SZZ 02 Flashcards
Nástroje generického programování: dědičnost, rozhraní, polymorfismus, generická implementace abstraktních datových typů – třídy s typovým parametrem
Dědičnost
Rozhraní
Polymorfismus
Generická implementace abstraktních datových typů - Třídy s typovým parametrem
Dědičnost
- > Přidání vlastností k rodičovské třídě (nebo překrytí stávajících)
- > V javě klíčové slovo extends
- > Potomek musí volat v konstruktoru konstruktor předka klíčovým slovem super() (výjimka je implicitní konstruktor)
- > Možnost vytvoření abstraktní třídy s abstraktními metodami, v takovém případě explicitně očekáváme, že je potomek překryje
- > Identifikátor final zabrání k překrytí metody
- > Jako typ předka mohu použít instanci potomka
Rozhraní
Obsahuje hlavičky metod, které očekáváme, že třída implementující rozhraní metody implementuje (v javě klíčové slovo implements)
Třída může implementovat více rozhraní (narozdíl od dědění)
Jako typ rozhraní používám konkrétní třídu, které rozhraní implemetuje
Polymorfismus
Instanci potomka mohu použít všude, kde očekávám předka. Při kompilaci nemohu určit, který konkrétní kód metody poběží.
Person p = new Teacher(); p.speak(); -> zavolá metodu učitele, ne osoby
+ Mohu mít i statický polymorfismus
Get(a, b)
Get(a)
Generická implementace abstraktních datových typů - Třídy s typovým parametrem
Problém: Chci implementovat například zásobník, aby pracoval s libovolnou třídou
Řešení 1: Pracovat s třídou Object. Pak ale můžu kombinovat různé datové typy dohromady.
Řešení 2: Pracovat s typovým parametrem. Poté při inicializaci zásobníku uvedu konrétní třídu, pro kterou zásobník vytvářím. Do zásobníku pak mohu vkládat a získávat instance pouze uvedeného typu.
Stack implementace
Stack konkrétní instance