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 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 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 vytvořit abstraktní třídy, známé také jako Abstraktní základní třídy (ABC) (nelze vytvořit instanci této třídy). Takže abstraktní třídy mají smysl pouze tehdy, pokud 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í. Proto abstraktní třídy fungují jako nadřazené třídy, ze kterých 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 přidat k jejich dokončení.
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. Pokud tomu tak není, stane se podřízená třída také třídou Abstract. To vše znamená, že když programátor nominuje třídu jako abstrakt, říká, že třída bude neúplná a bude obsahovat prvky, které je třeba doplnit zděděnými podtřídami. To je pěkný způsob, jak vytvořit smlouvu mezi dvěma programátory, což zjednodušuje úkoly při vývoji softwaru. Programátorka, která kód zdědí, musí přesně dodržovat definice metody (ale samozřejmě může mít vlastní implementaci).
Co je to rozhraní?
Rozhraní je abstraktní typ, který se používá k určení kontraktu, který by měl být implementován třídami, které implementují dané rozhraní. Klíčové slovo rozhraní 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 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í mít buď hodnotu null, 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í koncept nebo entitu s částečnou nebo žádnou implementací. Na druhou stranu je rozhraní abstraktním typem, který se používá k určení 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.