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

Anonim

Abstraktní třída a rozhraní se primárně používají pro abstrakci, jsou však velmi odlišné od sebe. Oba jsou hlavní součástí Java, ale mají vlastní použití. Zatímco oba termíny mohou být vzájemně synonymem, nemohou být vzájemně zaměnitelné.

Mezi oběma skupinami existují značné rozdíly. Zatímco metoda rozhraní je ve výchozím nastavení abstraktní, abstrakt může obsahovat abstraktní i neabstraktní metody. Od rozhraní Java 8 mají rozhraní také implementace metod a mohou mít v jazyce Java statické i výchozí metody. Pojďme si prostudovat rozdíl mezi těmito dvěma.

Co je to abstraktní třída v jazyce Java?

Abstraktní třída v jazyce Java je třída, která je prohlášena za abstraktní - může nebo nemusí obsahovat abstraktní metody. Je to docela podobné rozhraní Java kromě faktu, že může obsahovat implicitní implementaci metody. Stejně jako v objektově orientovaném programování je abstrakce v jazyce Java dosažena pomocí abstraktních tříd a rozhraní. V jazyce Java abstrakce znamená skrýt nerelevantní detaily od uživatele, aby se soustředily jen na základní detaily, které zvyšují efektivitu, a tím snižují složitost. Klíčové slovo "abstrakt" se používá k vytvoření abstraktní třídy těsně před klíčovým slovem ve třídě.

Abstraktní třída může nebo nemusí obsahovat metody abstrakce (metody bez těla), ale pokud má třída alespoň jednu metodu abstrakce, musí být prohlášena za abstraktní. Nicméně abstraktní metody mohou být použity 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 například soukromé, veřejné, statické a chráněné, v závislosti na úrovni viditelnosti. Abstraktní třída nemůže být instancována a neposkytuje 100% abstrakci vzhledem k tomu, že může mít konkrétní metodu.

Co je to rozhraní?

Rozhraní vypadá jako třída, ale není. Vzhledem k tomu, že jazyk Java nepodporuje více dědičností, rozhraní je někdy ideální pro poskytnutí základny pro hierarchii tříd. Rozhraní je spíše modelem třídy, který se také používá k dosažení abstrakce v jazyce Java. Obsahuje abstraktní metody a statické konstanty. Jednoduše řečeno, rozhraní je sbírka abstraktních metod, která se používá k zadání chování, které musí třída implementovat. Na rozdíl od abstraktní třídy rozhraní poskytuje plnou abstrakci v Javě. Může mít obě metody a proměnné stejně jako třída, avšak metody deklarované v rozhraní jsou ve výchozím nastavení abstraktní.

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

  1. "Více dědičnosti" abstraktní třídy a rozhraní v jazyce Java - Navzdory skutečnosti, že abstraktní třída a rozhraní jsou primárně používány pro abstrakci, jsou od sebe zcela odlišné. Zatímco abstraktní třída je třída, rozhraní je rozhraní. Znamená to, že zatímco rozhraní může rozšířit pouze další rozhraní Java, abstraktní třída může implementovat více dědičností v Javě. No, Java nepodporuje více dědičností, ale lze implementovat několik dědičností v jazyce Java.
  2. "Typ metody" abstraktní třídy a rozhraní v Javě - Druhý hlavní rozdíl 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 neabstraktní metody. Nicméně, protože Java 8, rozhraní může mít také výchozí a statické metody.
  3. "Modifikátory přístupu" abstraktní třídy a rozhraní v jazyce Java - Abstraktní třída může mít veřejné, soukromé a chráněné modifikátory přístupu, avšak metody rozhraní jsou implicitně veřejné a abstraktní. Nelze použít žádný jiný modifikátor přístupu s metodami rozhraní ".
  4. "Implementace" abstraktní třídy a rozhraní v jazyce Java - Abstraktní třída může poskytnout implementaci rozhraní. Rozhraní, na druhé straně, nemůže poskytnout implementaci abstraktní třídy.
  5. "Klíčové slovo" abstraktní třídy a rozhraní v jazyce Java- Zatímco "abstraktní" klíčové slovo je používáno k prohlášení abstraktní třídní metody jako abstraktní, nicméně, rozhraní jsou zcela jiný příběh; mohou mít pouze veřejné, statické konečné konstanty a prohlášení o metodách.
  6. "Použití" abstraktní třídy a rozhraní v jazyce Java - Zatímco rozhraní je ideální pro deklarování typu, abstraktní třída je nejvhodnější pro opakovatelnost kódu a perspektivu evoluce. 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í předtím, než se v Javě zavolá 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 nekonečné proměnné.

Abstraktní třída vs rozhraní v jazyce Java: srovnávací tabulka

Abstraktní třída Rozhraní
Abstraktní klíčové slovo se používá k vytvoření abstraktní třídy a může být použito 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 abstraktní i neabstraktní 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í finální v rozhraní.
Abstraktní třída může poskytnout implementaci rozhraní. Rozhraní nemůže poskytnout implementaci abstraktní třídy.
Může mít metody s implementacemi. Poskytuje absolutní abstrakci a nemůže implementovat metody.
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íce dědictví. Podporuje několik dědictví.
Je ideální pro opakované použití kódu a evoluční perspektivu. Je ideální pro deklaraci typu.

Shrnutí bodů na abstraktní třídě a rozhraní v jazyce Java

Jak abstraktní třída, tak rozhraní se používají pro abstrakci; mají však spravedlivé rozdíly. Hlavní rozdíl mezi těmito dvěma způsoby 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 abstraktní i neabstraktní metody. Rozhraní může na druhé straně mít pouze abstraktní metody, takže nemohou mít implementaci, což prostě znamená, že rozhraní nemůže mít neabstraktní metody. Abstraktní třída nemůže být instancí, která zakazuje vytváření objektu. Na druhou stranu rozhraní může vypadat jako třída, ale není.