Rozdíly mezi rozhraním Java vs abstraktní třídou

Rozhraní specifikuje, co třída musí udělat, ale ne jak. Je to v podstatě plán pro třídu. Proměnné deklarované v rozhraní jsou ve výchozím nastavení veřejné, statické a konečné. Třída, která je deklarována klíčovým slovem „abstraktní“, se nazývá abstraktní třída Třída, která je odvozena od třídy Abstraktní, musí definovat všechny metody, které jsou v abstraktní třídě deklarovány jako abstraktní.

Co je rozhraní?

Rozhraní je jako třída, ale není to, co může mít metody a proměnné jako třídu, ale metody deklarované v rozhraní jsou ve výchozím nastavení abstraktní. Rozhraní se používá k zajištění úplné abstrakce, protože metody v rozhraních nemají tělo. Předtím, než se k nim budou snažit získat přístup, musí je implementovat třída. Obecně třída, která implementuje rozhraní, musí definovat všechny metody deklarované v rozhraní, pokud tomu tak není, musí být třída deklarována jako abstraktní. Rozhraní nemůžeme rozšířit na více než jednu třídu, protože to Java neumožňuje. K deklaraci rozhraní musíme použít klíčové slovo rozhraní a implementovat rozhraní, které musíme použít klíčové slovo implementuje.

Co je to abstrakt?

Třída, která je deklarována klíčovým slovem „abstraktní“, se nazývá abstraktní třída. Třída Abstract může mít na rozdíl od normální třídy abstrakt (metoda bez těla) a konkrétní metody (metoda s tělem). Abstraktní třída nemůže být instanční, tj. Nemůžeme pro ni vytvořit objekt, ale můžeme mít odkazy na abstraktní třídu vytvořením další třídy, která rozšiřuje abstraktní třídu a poskytuje implementaci metod. Můžeme použít objekt dítěte (který je nově vytvořený) k volání abstraktních a normálních metod. Může mít konstruktory a abstraktní třída se nazývá, když se vytvoří zděděná instance třídy. V Javě můžeme mít abstraktní třídu bez abstraktního klíčového slova, ale tyto třídy nelze konkretizovat, pouze zděděné a mohou mít také konečné metody.

Srovnání hlava-hlava mezi rozhraním Java vs abstraktní třídou (infografika)

Níže je uvedeno Top 9 srovnání mezi rozhraním Java vs abstraktní třídou

Klíčové rozdíly mezi rozhraním Java vs abstraktní třídou

Rozhraní Java Interface vs Abstraktní třída jsou na trhu populární volbou; pojďme diskutovat o některých hlavních rozdílech mezi rozhraním Java vs abstraktní třídou:

  • Rozhraní lze použít k dosažení více dědičností a volné vazby, které nemůžeme dosáhnout abstraktní třídou.
  • Rozhraní použité k dosažení úplné abstrakce, zatímco abstraktní třída může dosáhnout částečné abstrakce.
  • Abstraktní třída rozšiřuje současně pouze jednu normální třídu nebo abstraktní třídu, zatímco rozhraní může rozšiřovat libovolný počet rozhraní najednou.
  • Abstraktní třída rozšiřuje další abstraktní nebo normální třídu, zatímco rozhraní může rozšiřovat pouze další Java rozhraní.
  • V abstraktní třídě musíme deklarovat metody pomocí „abstraktního“ klíčového slova, zatímco v rozhraní můžeme deklarovat metody s nebo bez „abstraktního“ klíčového slova.
  • Rozhraní může mít pouze abstraktní metody, zatímco abstraktní třída může mít abstraktní i normální třídy.
  • Abstraktní třída může mít různé proměnné, jako jsou statické, konečné, non-finální, nestatické, veřejné, soukromé atd., Zatímco rozhraní může mít pouze veřejné, statické a konečné proměnné.
  • Abstraktní třídu a její metody lze vytvořit klíčovým slovem „abstraktní“, zatímco klíčové slovo rozhraní se používá k vytvoření rozhraní, ale nikoli metod.
  • Abstraktní třída může mít konstruktory, zatímco rozhraní nemá konstruktoru.
  • Abstraktní třída se používá pro definování smlouvy, implementace metod pro podtřídu, zatímco rozhraní se používá pro definování smlouvy pro podtřídy.
  • Rozhraní může rozšířit pouze jiná rozhraní Java, zatímco abstraktní třída může rozšířit další třídu a implementovat také rozhraní.
  • Třída, která rozšiřuje abstraktní třídu pomocí klíčového slova rozšiřující, musí implementovat všechny metody deklarované v abstraktní třídě, pokud třída není také abstraktní třídou, zatímco třída, která implementuje rozhraní pomocí klíčového slova rozhraní, také poskytuje implementaci pro všechny metody deklarované v rozhraní.

Porovnání tabulky Java rozhraní vs abstraktní třídy

Následuje srovnávací tabulka mezi rozhraním Java a verzí abstraktní třídy

Základy srovnání mezi rozhraním Java vs abstraktní třídouAbstraktní třídaRozhraní Java
Typ metodyTřída Abstract může mít jak abstraktní (metody bez těla), tak i ne abstraktní (metody s tělem) metodyV rozhraní můžeme mít pouze abstraktní metody. Z Java 8 může mít rozhraní také statické a výchozí metody
SyntaxTřídu Abstract lze deklarovat takto:
veřejná abstraktní třídní škola (Veřejná abstraktní prázdná třída ();
veřejná abstraktní prázdná síla ();)
Rozhraní lze deklarovat takto:
tvar veřejného rozhraní (Void draw_rect (); Void draw_square ();)
Konečná proměnnáAbstraktní třída může mít finální a non-finální proměnné.Zatímco rozhraní může mít pouze konečné proměnné, protože proměnné jsou ve výchozím nastavení v rozhraní konečné.
ImplementaceAbstraktní třída může zajistit implementaci všech abstraktních metod v rozhraní.Zatímco v rozhraní nemůžeme zajistit implementaci abstraktní třídy.
Variabilní typAbstraktní třída může obsahovat všechny typy proměnných, tj. Finální, non-finální, statické, nestatické, soukromé, veřejné atd.Zatímco rozhraní může mít pouze veřejné, statické a konečné proměnné.
Členové dat PřístupnostAbstraktní třída může mít členy třídy jako soukromé, chráněné, veřejné atd.Rozhraní může mít pouze členy veřejné třídy, protože členové dat rozhraní jsou ve výchozím nastavení veřejné.
Dědičnost vs abstrakceAbstraktní třídu lze rozšířit pomocí klíčového slova „rozšiřuje“ a je třeba zajistit implementaci všech deklarovaných metod v nadřazené třídě nebo abstraktní tříděRozhraní lze implementovat pomocí klíčového slova „interface“ a je třeba zajistit implementaci všech metod deklarovaných v rozhraní
Vícenásobná implementaceAbstraktní třída může rozšířit další třídu Java implementující více rozhraníRozhraní může rozšířit pouze jiné rozhraní.
Kdy použítAbstraktní třída musí být použita, když některé třídy potřebují sdílet několik řádků kódu, pak můžeme dát tento kód do abstraktní třídy a rozšířit o všechny související třídy.Rozhraní lze použít, když potřebujeme dosáhnout více dědičností, úplnou abstrakci implementací všech metod deklarovaných v rozhraní třídou, která implementuje rozhraní.

Závěr - rozhraní Java vs abstraktní třída

A konečně je to přehled rozdílu mezi rozhraním Java vs verzí Abstract Class. Doufám, že budete lépe rozumět těmto konceptům rozhraní Java Interface vs Abstract Class. Na základě našich požadavků můžeme používat jak Java Interface vs Abstract Class, tak pouze rozhraní a pouze abstraktní třídu. Nejlepším přístupem k navrhování je však použití rozhraní a abstraktní třídy společně. Když třída potřebuje sdílet nějaký kód, pak můžeme tento kód umístit do abstraktní třídy a když je vyžadován stav objektu, můžeme získat definováním nestatických nebo ne-finálních polí, pak můžeme použít abstraktní třídu. Rozhraní můžeme použít, když potřebujeme úplnou abstrakci, vícenásobnou dědičnost a volné spojení.

Doporučený článek

Toto bylo vodítko k největším rozdílům mezi rozhraním Java vs verzí Abstract Class. Zde také diskutujeme o klíčových rozdílech Java Interface vs Abstract Class s infografiky a srovnávací tabulkou. Můžete se také podívat na následující články -

  1. Jak užitečné jsou otázky a odpovědi na pohovor C #?
  2. 8 Užitečné porovnání HTML5 vs Flash
  3. Java vs C # - 8 Důležité rozdíly
  4. Ruby vs Node
  5. Srovnání HTML5 vs JavaScript
  6. ArrayList vs Java Vector

Kategorie: