Rozdíly mezi třídou abstraktní a rozhraním v jazyce Java

Anonim

Abstraktní třída vs rozhraní v Javě

Abychom porozuměli rozdílu mezi abstraktní třídou a rozhraním v Javě, je důležité především pochopit každou z nich nezávisle. Abstraktní třída v Javě se používá při deklarování podtříd se souborem společných vlastností. Společné užívání abstraktní třídy je super třída jiných tříd, která jí ve skutečnosti umožňuje rozšířit abstraktní třídu. Při vyhlášení abstraktní třídy se používá abstraktní klíčové slovo. Stejně jako každá jiná třída by měla, abstraktní třída má pole, která popisují metody a vlastnosti, které může třída vykonávat. Pouhým prohlášením o abstraktní třídě nemůže být třída iniciována

Rozhraní Java lze přirovnat k protokolu. Představuje přednastavené a dohodnuté chování, které umožňuje usnadnění interakce nesouvisejících objektů. V závislosti na uživateli má rozhraní klíč k provádění různých akcí. Rozhraní proto slouží jako vazba mezi výrobcem a spotřebitelem. Rozhraní v Javě jsou tedy skupinou metod obsahujících prázdná těla, která mohou mít konstantní deklarace. Při vystavení třídy rozhraní Java znamená to, že chování, které se očekává od třídy, je implementace všech metod rozhraní.

Rozdíly

Nejprve abstraktní třída umožňuje pole, které nejsou statické nebo konečné, na rozdíl od statických a konečných polí používaných v rozhraní. Rozhraní nemohou mít v nich žádné implementační kódy a v abstraktní třídě může být implementační kód. Implementační kódy rozvinuté v abstraktní třídě mohou mít několik nebo všechny implementované metody. Ve výchozím nastavení jsou všechny metody rozhraní "abstraktní".

Viditelnost je také možná pro metody nebo členy abstraktní třídy, které se mohou lišit, například veřejné, chráněné, soukromé nebo žádné. Viditelnost rozhraní na druhé straně může být přednastavena pouze na jeden režim viditelnosti, který je "veřejný"."

Abstraktní třída automaticky dědí třídu objektů. To ve skutečnosti znamená, že jsou zahrnuty metody jako klon () a rovná (). V rozhraní není možné dědictví třídy objektu. Po této abstraktní třídě má schopnost mít konstruktora, ale rozhraní nemůže mít jedno.

Rozhraní Java má také velmi důležitou funkci při implementaci více dědičností, protože třída může mít pouze jednu super třídu. Přestože může být přítomna pouze jedna super třída, může být implementována v libovolném počtu rozhraní. Není možné mít více dědictví v abstraktní třídě.

Ve výkonnosti mají rozhraní zpravidla pomalejší implementaci oproti abstraktní třídě hlavně kvůli extra orientaci při nalezení odpovídající metody ve třídě. Rozdíl se však stal pomalejší díky moderním virtuálním strojům Java, které jsou neustále aktualizovány.

Přidání metody do rozhraní vyžaduje, abyste sledovali všechny implementační třídy, které implementují konkrétní rozhraní. Případně můžete rozšířit rozhraní tak, aby bylo možné mít další metody. Pokud jste se zabývali abstraktní třídou, je nutné přidat výchozí implementaci metody a kód bude nadále fungovat. Vzhledem k tomu, že existují rozdíly mezi abstraktními třídami a rozhraními, je důležité si uvědomit, že nejsou soupeři, ale zde zmíněné rozdíly slouží k vzájemnému doplňování.

souhrn

  1. Políčka abstraktní třídy nejsou statická nebo konečná, na rozdíl od rozhraní, které má statické a finální tabulky.

  2. V rozhraní nemůže být použit žádný implementační kód, zatímco může být použit v abstraktní třídě.

  3. Viditelnost rozhraní může být pouze veřejná, zatímco abstraktní viditelnost třídy se může lišit.

  4. Abstraktní třída automaticky dědí objektovou třídu, ale v rozhraní není možná.

  5. Abstraktní třída je rychlejší než rozhraní v implementaci.