Skip to content

Latest commit

 

History

History
34 lines (25 loc) · 2.15 KB

vlastnosti_oop.md

File metadata and controls

34 lines (25 loc) · 2.15 KB

Vlastnosti OOP — dědičnost a polymorfismus

Dědičnost

Dedičnost umožňuje vytvoření nové třídy z definice již existující. Původní třída se označuje jako rodič, nová třída jako potomek. Např. nákladní auto dědí všechny vlastnosti objektu auto a přidá k němu další jako nosnost.

  • jedná se o jev, kdy vytváříme novou třídu na základě nějaké již existující
  • takto vytvořená třída se označuje jako přímá podtřída (přímý potomek)
  • původní třída se nazývá základní třída (rodičovská třída), nebo někdy také nadtřída třídy odvozené
    • Klíčové slovo pro odvození dědičnosti - extends
    • Jednoduchá dědičnost - můžeme dědit maximálně z jedné třídy
    • Do potomka se nedědí datové členy a metody které jsou označeny jako private, konstruktory
    • Datové členy a metody upravujeme nebo přidáváme nové
    • Pokud chceme chování metody upravit - nesmíme změnit signaturu metody (@Override)
    • Odkaz na rodiče - super.neco nebo konstruktor super()
    • final – blokace modifikace chování metody i datového členu (konstanta)

Polymorfismus (mnohotvárnost)

Jeden objekt má metody se stejným názvem, ale různými parametry. U objektů odvozených z různých tříd lze volat tutéž metodu se stejným významem.

  • funguje pouze u objektů odvozených tříd nebo v rámci implementace rozhraní

  • odkaz na objekt odvozené třídy musí být uložen v proměnné typu přímé nebo nepřímé základní třídy

    Pes alik = new Pes(); //OK
    Zvire alik = new Pes(); //OK
    Object alik = new Pes(); //OK
    
  • metoda pro využití polymorfizmu musí být členem základní třídy (typu proměnné, kterou používáte) a také musí být členem třídy, které je daný objekt součástí (odkazuje na něj proměnná, kterou používáte)

    • Abstraktní třída
    • Není žádné klíčové slovo, nebo něco podobného
    • Jediné co se musí zabezpečit, aby vše fungovalo aby byla stejná metoda, respektive její signatura ve všech zúčastněných třídách (v hierarchii dědičnosti nebo v implementaci rozhraní)