Rozdíly mezi abstraktní třídou a rozhraním v Javě

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

Abychom pochopili rozdíly mezi abstraktní třídou a rozhraním v Javě, je důležité nejprve porozumět každé z nich nezávisle. Abstraktní třída v Javě se používá pro deklaraci podtříd se sadou společných charakteristik. Běžné použití abstraktní třídy je super třída jiných tříd, což ve skutečnosti umožňuje rozšířit abstraktní třídu. Abstraktní klíčové slovo se používá v deklaraci abstraktní třídy. Stejně jako jakákoli jiná třída, abstraktní třída má pole, která popisují metody a vlastnosti, které může třída provést. Pouhým prohlášením abstraktní třídy nelze tuto třídu iniciovat

Rozhraní Java lze přirovnat k protokolu. Představuje přednastavené a dohodnuté chování, které umožňuje usnadnit interakci nesouvisejících objektů. V závislosti na uživateli má rozhraní klíč k provádění různých akcí. Rozhraní tedy slouží jako spojení 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í prohlášení. Při vystavení třídy rozhraní Java to znamená, že očekávané chování třídy je implementace všech metod rozhraní.


Rozdíly

Za prvé, 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ích. Rozhraní nemohou obsahovat žádný implementační kód a v abstraktní třídě může být implementační kód. Implementační kódy zavedené 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, jako jsou veřejné, chráněné, soukromé nebo žádné. Viditelnost rozhraní může být naproti tomu nastavena pouze na jeden způsob viditelnosti, který je „veřejný“.

Abstraktní třída automaticky zdědí třídu objektu. To ve skutečnosti znamená, že jsou zahrnuty metody jako klon () a rovno (). V rozhraní není možné dědičnost třídy objektů. Po tomto má abstraktní třída schopnost mít konstruktor, ale rozhraní ji nemůže mít.

Rozhraní v Javě má ​​také velmi důležitou funkci při implementaci více dědictví, protože třída může mít pouze jednu super třídu. Ačkoli může být přítomna pouze jedna nadřazená třída, může být implementována v libovolném počtu rozhraní. V abstraktní třídě není možné mít vícenásobné dědictví.

Ve výkonu, rozhraní inklinují být pomalejší v implementaci na rozdíl od abstraktní třídy hlavně kvůli zvláštnímu směru nalezení odpovídající metody ve třídě. Rozdíl se však zpomalil díky moderním virtuálním strojům Java, které se neustále inovují.

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 rozhraní rozšířit tak, aby umožňovalo další metody. Pokud náhodou pracujete s abstraktní třídou, stačí přidat výchozí implementaci metody a kód bude nadále funkční. Vzhledem k tomu, že existují rozdíly mezi abstraktními třídami a rozhraními, je důležité si uvědomit, že se nejedná o soupeře, ale zde uvedené rozdíly slouží k vzájemnému doplňování.  

souhrn

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

  2. V rozhraních nelze použít žádný implementační kód, zatímco v abstraktní třídě.

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

  4. Abstraktní třída automaticky zdědí třídu objektu, ale v rozhraní to není možné.

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