Abstraktní třída vs rozhraní
Abstract class a Interface jsou dvě objektově orientované konstrukce 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 implementace smlouvy. Abstraktní třída je třída, kterou nelze inicializovat, ale lze ji rozšířit. Rozhraní je typ, který musí být implementován jinými třídami. V Javě jsou abstraktní třídy 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?
Abstraktní třídy, známé také jako abstraktní základní třídy (ABC), obvykle nelze vytvořit instanci (nelze vytvořit instanci této třídy). Abstraktní třídy jsou tedy smysluplné pouze v případě, že programovací jazyk podporuje dědičnost (schopnost vytvářet podtřídy z rozšíření třídy). Abstraktní třídy obvykle představují abstraktní koncept nebo entitu s částečnou nebo žádnou implementací. Abstraktní třídy proto 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é vlastnosti nadřazené třídy a lze přidat funkce, které je doplní.
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, jedná se o konkrétní třídu. Ale pokud tomu tak není, stane se podřízená třída také abstraktní třídou. To vše znamená, že když programátorka nominuje třídu jako Abstrakt, říká, že třída bude neúplná a bude mít prvky, které je třeba doplnit dědící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 ke zdědění, musí přesně dodržovat definice metod (ale samozřejmě může mít vlastní implementaci).
Co je to rozhraní?
Rozhraní je abstraktní typ, který se používá ke specifikaci smlouvy, která by měla být implementována třídami, které implementují toto rozhraní. Klíčové slovo interface se používá k definování rozhraní a klíčové slovo Implements se používá k implementaci rozhraní třídou (v programovacím jazyce Java). Obvykle bude rozhraní obsahovat pouze podpisy metod a deklarace konstant. 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ď null, nebo by měl obsahovat objekt třídy, která implementuje toto 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í koncept nebo entitu s částečnou nebo žádnou implementací. Na druhou stranu, rozhraní je abstraktní typ, který se používá ke specifikaci kontraktu, který by měl být implementován 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 dědit z více než jedné abstraktní třídy, ale může implementovat více rozhraní. Rozhraní nemůže implementovat jiné rozhraní. Rozhraní však může třídu rozšířit.