Abstraktní třída vs dědičnost
 

Abstraktní třída a dědičnost jsou dva důležité objektově orientované koncepty, které se nacházejí v mnoha objektově orientovaných programovacích jazycích, jako je Java. Abstraktní třídu lze považovat za abstraktní verzi běžné (konkrétní) třídy, zatímco Dědičnost umožňuje novým třídám rozšířit další třídy. Abstraktní třída je třída, kterou nelze inicializovat, ale lze ji rozšířit. Takže abstraktní třídy mají smysl pouze tehdy, pokud programovací jazyk podporuje dědičnost. V Javě jsou třídy Abstract deklarovány pomocí klíčového slova Abstract, zatímco klíčové slovo Extends se používá pro zdědění z (super) třídy.

Co je abstraktní třída?

Typicky nelze abstraktní třídy, také známé jako ABC (Abstract Base Classes), vytvořit instanci (instanci této třídy nelze vytvořit). Takže abstraktní třídy mají smysl pouze tehdy, pokud programovací jazyk podporuje dědičnost (schopnost vytvářet podtřídy z rozšiřování třídy). Abstraktní třídy obvykle představují abstraktní pojem nebo entitu s částečnou nebo žádnou implementací. Proto abstraktní třídy fungují jako nadřazené třídy, z nichž jsou odvozeny podřízené třídy, takže podřízená třída bude sdílet neúplné funkce nadřazené třídy a lze je doplnit funkčností.

Abstraktní třídy mohou obsahovat abstraktní metody. Podtřídy rozšiřující abstraktní třídu mohou implementovat tyto (zděděné) abstraktní metody. Pokud podřízená třída implementuje všechny takové abstraktní metody, je to konkrétní třída. Ale pokud tomu tak není, třída dítěte se také stává třídou abstraktní. To vše znamená, že když programátor nominuje třídu jako abstrakt, říká, že třída bude neúplná a bude mít prvky, které musí být doplněny zděděnými podtřídami. Je to pěkný způsob, jak vytvořit smlouvu mezi dvěma programátory, což zjednodušuje úkoly při vývoji softwaru. Programátor, který píše kód, aby zdědil, musí přesně dodržovat definice metod (ale samozřejmě může mít i vlastní implementaci).

Co je dědičnost?

Dědičnost je objektově orientovaný koncept, který umožňuje novým třídám rozšířit další třídy. Rozšiřuje klíčové slovo se používá k implementaci koncepce dědičnosti v programovacím jazyce Java. Dědičnost v podstatě poskytuje opakované použití kódu tím, že umožňuje rozšíření vlastností a chování existující třídy o nově definovanou třídu. Když nová podtřída (nebo odvozená třída) rozšíří nadřazenou třídu (nebo nadřazenou třídu), podtřída zdědí všechny atributy a metody nadřazené třídy. Podtřída může volitelně potlačit chování (poskytovat nové nebo rozšířené funkce metodám) zděděné z nadřazené třídy. Podtřída obvykle nemůže rozšířit více super tříd (např. V Javě). Proto nelze použít rozšíření pro vícenásobné dědictví. Chcete-li mít více dědictví, musíte použít rozhraní.

Jaký je rozdíl mezi abstraktní třídou a dědičností?

Abstraktní třídy obvykle představují abstraktní pojem nebo entitu s částečnou nebo žádnou implementací. Dědičnost umožňuje novým třídám rozšířit další třídy. Protože abstraktní třídy nelze konkretizovat, musíte použít koncept dědičnosti, abyste mohli využívat abstraktní třídy. Jinak třída Abstract nemá využití. Třídy abstraktů mohou obsahovat metody abstraktů a když je třída rozšířena, zdědí se všechny metody (Abstraktní a konkrétní). Zděděná třída může implementovat jakoukoli nebo všechny metody. Pokud nejsou implementovány všechny metody abstrakt, pak se tato třída také stane třídou abstrakt. Třída nemůže zdědit více než jednu třídu abstraktní (nejedná se o kvalitu abstraktních tříd sama o sobě, ale spíše o omezení dědičnosti).