Abstraktní třída vs rozhraní
 

Abstraktní třída a rozhraní jsou dva objektově orientované konstrukty nalezené 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 rozhraní lze považovat za prostředek k realizaci smlouvy. Abstraktní třída je třída, kterou nelze inicializovat, ale lze ji rozšířit. Rozhraní je typ, který musí implementovat jiné třídy. V Javě jsou třídy Abstract deklarovány pomocí klíčového slova Abstract, zatímco klíčové slovo interface se používá k definování rozhraní.

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 rozhraní?

Rozhraní je abstraktní typ, který se používá k určení smlouvy, která by měla být implementována třídami, které toto rozhraní implementují. Klíčové slovo rozhraní se používá k definování rozhraní a klíčové slovo implementace se používá pro implementaci rozhraní třídou (v programovacím jazyce Java). Rozhraní obvykle obsahuje pouze podpisy metod a konstantní deklarace. Jakékoli rozhraní, které implementuje konkrétní rozhraní, by mělo implementovat všechny metody definované v rozhraní nebo by mělo být deklarováno jako abstraktní třída. V Javě lze typ odkazu na objekt definovat jako typ rozhraní. Ale tento objekt musí být buď nulový, nebo by měl obsahovat objekt třídy, která implementuje dané konkrétní rozhraní. Pomocí klíčového slova Implements v Javě můžete implementovat více rozhraní do jedné třídy.

Jaký je rozdíl mezi abstraktní třídou a rozhraním?

Abstraktní třídy obvykle představují abstraktní pojem nebo entitu s částečnou nebo žádnou implementací. Na druhé straně rozhraní je abstraktní typ, který se používá k určení smlouvy, která by měla být implementována třídami. Abstraktní třídy by měly být zděděny (nebo rozšířeny), zatímco rozhraní by měla být implementována. Abstraktní třídy mohou obsahovat abstraktní metody, zatímco rozhraní by mělo obsahovat pouze abstraktní metody. Abstraktní třídy mohou obsahovat libovolné proměnné, ale rozhraní mohou definovat pouze konstanty. Třída nemůže zdědit více než jednu abstraktní třídu, ale může implementovat více rozhraní. Rozhraní nemůže implementovat jiné rozhraní. Rozhraní však může rozšířit třídu.