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

Abstraktní třída i rozhraní jsou primárně používány pro abstrakci, jsou však od sebe velmi odlišné. Oba jsou jádrem Java, ale mají vlastní využití aplikací. I když oba pojmy mohou být navzájem synonymní, nemohou být použity zaměnitelně.

Mezi nimi jsou značné rozdíly. Zatímco metoda rozhraní je ve výchozím nastavení abstraktní, abstrakt může obsahovat abstraktní i ne abstraktní metody. Protože Java 8, rozhraní mají také implementaci metod a mohou mít v Javě statické i výchozí metody. Pojďme studovat rozdíl mezi těmito dvěma podrobně.

Co je abstraktní třída v Javě?

Abstraktní třída v Javě je třída, která je prohlášena za abstraktní - může nebo nemusí obsahovat abstraktní metody. Je to docela podobné rozhraní Java s tou výjimkou, že může obsahovat implicitní implementaci metody. Stejně jako v objektově orientovaném programování je abstrakce v Javě dosaženo pomocí abstraktních tříd a rozhraní. V Javě znamená abstrakce skrývat irelevantní podrobnosti před uživatelem a zaměřit se pouze na podstatné detaily, aby se zvýšila účinnost, čímž se sníží složitost. Klíčové slovo „abstrakt“ se používá k vytvoření abstraktní třídy těsně před klíčovým slovem třídy v deklaraci třídy.

Abstraktní třída může nebo nemusí obsahovat abstrakční metody (metody bez těla), ale pokud má třída alespoň jednu abstrakční metodu, musí být deklarována jako abstraktní. Metody bez abstraktů však lze použít pouze v abstraktní třídě, ale pouze k implementaci výchozího chování. Metody v abstraktní třídě mohou mít modifikátory přístupu, jako jsou soukromé, veřejné, statické a chráněné, v závislosti na úrovni viditelnosti. Abstraktní třídu nelze konkretizovat a neposkytuje 100% abstrakci, protože může mít konkrétní metodu.

Co je rozhraní?

Rozhraní sice vypadá jako třída, ale není. Protože Java nepodporuje vícenásobné dědictví, je někdy rozhraní ideální pro poskytnutí základu pro hierarchii tříd. Rozhraní je spíše plán třídy, která se také používá k dosažení abstrakce v Javě. Obsahuje abstraktní metody a statické konstanty. Zjednodušeně řečeno, rozhraní je kolekce abstraktních metod, které se používají k určení chování, které má třída implementovat. Na rozdíl od abstraktní třídy poskytuje rozhraní plnou abstrakci v Javě. Může mít metody i proměnné stejně jako třída, ale metody deklarované v rozhraní jsou ve výchozím nastavení abstraktní.

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

  1. „Vícenásobná dědičnost“ abstraktní třídy a rozhraní v Javě - Navzdory skutečnosti, že abstraktní abstrakce i rozhraní se primárně používají pro abstrakci, jsou od sebe navzájem docela odlišné. Zatímco abstraktní třída je třída, rozhraní je rozhraní. To znamená, že zatímco rozhraní může rozšířit pouze další rozhraní Java, abstraktní třída může implementovat více dědičností v Java. Java nepodporuje vícenásobné dědictví, ale v jazyce Java lze implementovat několik dědičností.
  2. „Typ metody“ abstraktní třídy a rozhraní v Javě - Druhým velkým rozdílem mezi těmito dvěma je, že zatímco rozhraní může mít pouze abstraktní metody, abstraktní třída může mít abstraktní i ne abstraktní metody. Protože však Java 8 může mít rozhraní výchozí i statické metody.
  3. „Přístupové modifikátory“ abstraktní třídy a rozhraní v Javě - Abstraktní třída může mít modifikátory veřejného, ​​soukromého a chráněného přístupu, avšak metody rozhraní jsou implicitně veřejné a abstraktní. Nemůžete použít žádný jiný modifikátor přístupu s metodami rozhraní “.
  4. „Implementace“ abstraktní třídy a rozhraní v Javě - Implementaci rozhraní může zajistit abstraktní třída. Rozhraní, na druhé straně, nemůže zajistit implementaci abstraktní třídy.
  5. „Klíčové slovo“ abstraktní třídy a rozhraní v Javě- Zatímco „abstraktní“ klíčové slovo se používá k deklaraci metody abstraktní třídy jako abstraktní, rozhraní jsou však úplně jiný příběh; mohou mít pouze veřejné, statické konečné konstanty a deklarace metod.
  6. „Použití“ abstraktní třídy a rozhraní v Javě - Zatímco rozhraní je ideální pro deklaraci typu, abstraktní třída je nejvhodnější pro opakované použití kódu a perspektivu vývoje. Rozhraní vypadá jako třída, ale není to třída.
  7. „Spolehlivost“ abstraktní třídy a rozhraní v Javě- Dalším velkým rozdílem mezi abstraktní třídou a rozhraním je to, že první je o něco rychlejší než druhý, protože vyhledávání je obvykle zapojeno do rozhraní dříve, než je v Javě vyvolána jakákoli přepsaná metoda..
  8. „Konečné proměnné“ abstraktní třídy a rozhraní v Javě - Proměnné deklarované v rozhraní jsou ve výchozím nastavení konečné, zatímco abstraktní třída může nebo nemusí obsahovat nepeněžní proměnné.

Rozhraní Abstract Class vs Interface in Java: Srovnávací tabulka

Abstraktní třída Rozhraní
Abstraktní klíčové slovo se používá k vytvoření abstraktní třídy a lze ji použít s metodami. Klíčové slovo rozhraní se používá k vytvoření rozhraní, ale nelze jej použít s metodami.
Třída může rozšířit pouze jednu abstraktní třídu. Třída může implementovat více než jedno rozhraní.
Abstraktní třída může mít jak abstraktní, tak ne abstraktní metody. Rozhraní může mít pouze abstraktní metody.
Proměnné nejsou ve výchozím nastavení konečné. Může obsahovat nekonečné proměnné. Proměnné jsou ve výchozím nastavení v rozhraní konečné.
Implementaci rozhraní může zajistit abstraktní třída. Rozhraní nemůže zajistit implementaci abstraktní třídy.
Může mít metody s implementacemi. Poskytuje absolutní abstrakci a nemůže mít implementaci metod.
Může mít veřejné, soukromé, statické a chráněné modifikátory přístupu. Metody jsou implicitně veřejné a abstraktní v rozhraní Java.
Nepodporuje vícenásobné dědictví. Podporuje více dědictví.
Je ideální pro opakované použití kódu a perspektivu vývoje. Je ideální pro deklaraci typu.

Souhrnné body o abstraktní třídě a rozhraní v Javě

Pro abstrakci se používá abstraktní třída i rozhraní; mají však spravedlivý podíl na rozdílech. Hlavní rozdíl mezi těmito dvěma je způsoben abstrakčními metodami. Zatímco první může nebo nemusí mít abstraktní metody, druhá je implicitně abstraktní. Abstraktní třída může mít jak abstraktní, tak ne abstraktní metody. Rozhraní, na druhé straně, může mít pouze abstraktní metody, a proto nemůže mít implementaci, což jednoduše znamená, že rozhraní nemůže mít ne abstraktní metody. Nelze vytvořit instanci abstraktní třídy, která zakazuje vytváření objektu. Rozhraní, na druhé straně, může vypadat jako třída, ale není.