Rozdiel medzi abstraktnou triedou a rozhraním v jazyku Java

Abstraktná trieda aj rozhranie sa primárne používajú na abstrakciu, sú však navzájom veľmi odlišné. Obidve sú hlavnou súčasťou Java, ale majú svoje vlastné použitie v aplikáciách. Aj keď oba pojmy môžu byť navzájom synonymá, nemožno ich používať zameniteľne.

Medzi týmito dvoma existujú významné rozdiely. Zatiaľ čo metóda rozhrania je v predvolenom nastavení abstraktná, abstrakt môže obsahovať abstraktné aj ne abstraktné metódy. Od verzie Java 8 majú rozhrania implementáciu metód a v jazyku Java môžu mať statické aj predvolené metódy. Pozrime sa podrobne na rozdiel medzi nimi.

Čo je abstraktná trieda v Jave?

Abstraktná trieda v Jave je trieda, ktorá sa vyhlasuje za abstraktnú - môže alebo nemusí obsahovať abstraktné metódy. Je to dosť podobné rozhraniu Java s tým rozdielom, že môže obsahovať implicitnú implementáciu metódy. Rovnako ako v objektovo orientovanom programovaní sa abstrakcia v Java dosahuje pomocou abstraktných tried a rozhraní. V Jave znamená abstrakcia skrytie irelevantných detailov od používateľa, aby sa zamerali iba na základné detaily, aby sa zvýšila účinnosť, čím sa zníži zložitosť. Kľúčové slovo „abstrakt“ sa používa na vytvorenie abstraktnej triedy tesne pred kľúčovým slovom triedy v deklarácii triedy.

Abstraktná trieda môže alebo nemusí obsahovať abstrakčné metódy (metódy bez tela), ale ak trieda má aspoň jednu abstrakčnú metódu, musí byť vyhlásená za abstraktnú. Non-abstraktné metódy sa však môžu použiť iba v abstraktnej triede, ale iba na implementáciu predvoleného správania. Metódy v abstraktnej triede môžu mať modifikátory prístupu, ako sú súkromné, verejné, statické a chránené, v závislosti od úrovne viditeľnosti. Abstraktnú triedu nie je možné vytvoriť inštanciu a neposkytuje 100 percentnú abstrakciu, pretože môže mať konkrétnu metódu.

Čo je rozhranie?

Rozhranie síce vyzerá ako trieda, ale nie je. Pretože Java nepodporuje viacnásobné dedenie, niekedy je rozhranie ideálne na poskytnutie základu pre hierarchiu tried. Rozhranie je skôr návrh triedy, ktorá sa tiež používa na dosiahnutie abstrakcie v Jave. Obsahuje abstraktné metódy a statické konštanty. Jednoducho povedané, rozhranie je súbor abstraktných metód, ktoré sa používajú na špecifikovanie správania, ktoré má trieda implementovať. Na rozdiel od abstraktnej triedy, rozhranie poskytuje úplnú abstrakciu v Jave. Môže mať metódy aj premenné rovnako ako trieda, avšak metódy deklarované v rozhraní sú predvolene abstraktné.

Rozdiel medzi abstraktnou triedou a rozhraním v jazyku Java

  1. „Viacnásobné dedičstvo“ abstraktnej triedy a rozhrania v jazyku Java - Napriek tomu, že ako abstrakcia sa primárne používajú abstraktná trieda aj rozhranie, sú od seba navzájom úplne odlišné. Kým abstraktná trieda je trieda, rozhranie je rozhranie. To znamená, že zatiaľ čo rozhranie môže rozširovať iba ďalšie rozhranie Java, abstraktná trieda môže implementovať viacero dedení v Java. Java nepodporuje viac dedení, ale v jazyku Java je možné implementovať viacero dedení.
  2. „Typ metódy“ abstraktnej triedy a rozhrania v jazyku Java - Druhý hlavný rozdiel medzi nimi je, že zatiaľ čo rozhranie môže mať iba abstraktné metódy, abstraktná trieda môže mať abstraktné aj ne abstraktné metódy. Od verzie Java 8 však rozhranie môže mať aj predvolené a statické metódy.
  3. „Modifikátory prístupu“ abstraktnej triedy a rozhrania v jazyku Java - Abstraktná trieda môže mať modifikátory verejného, ​​súkromného a chráneného prístupu, avšak metódy rozhrania sú implicitne verejné a abstraktné. S metódami rozhrania nemôžete použiť žiadny iný modifikátor prístupu “.
  4. „Implementácia“ abstraktnej triedy a rozhrania v jazyku Java - Abstraktná trieda môže zabezpečiť implementáciu rozhrania. Rozhranie na druhej strane nemôže zabezpečiť implementáciu abstraktnej triedy.
  5. „Kľúčové slovo“ abstraktnej triedy a rozhrania v jazyku Java- Zatiaľ čo kľúčové slovo „abstraktné“ sa používa na deklarovanie metódy abstraktnej triedy ako abstraktnej, rozhrania sú úplne iný príbeh; môžu mať iba verejné, statické konečné konštanty a deklarácie metód.
  6. „Použitie“ abstraktnej triedy a rozhrania v jazyku Java - Zatiaľ čo rozhranie je ideálne pre deklaráciu typu, abstraktná trieda je najvhodnejšia pre opakované použitie kódu a perspektívu vývoja. Rozhranie vyzerá ako trieda, ale nie je to trieda.
  7. „Spoľahlivosť“ abstraktnej triedy a rozhrania v jazyku Java- Ďalším veľkým rozdielom medzi abstraktnou triedou a rozhraním je to, že prvé je o niečo rýchlejšie ako druhé, pretože vyhľadávanie je zvyčajne zapojené do rozhrania predtým, ako sa v Jave vyvolá akákoľvek prepísaná metóda..
  8. „Konečné premenné“ abstraktnej triedy a rozhrania v jazyku Java - Premenné deklarované v rozhraní sú v predvolenom nastavení konečné, zatiaľ čo abstraktná trieda môže alebo nemusí obsahovať nekonečné premenné.

Abstraktné trieda verzus rozhranie v Jave: porovnávacia tabuľka

Abstraktná trieda Rozhranie
Abstraktné kľúčové slovo sa používa na vytvorenie abstraktnej triedy a môže sa použiť s metódami. Kľúčové slovo rozhrania sa používa na vytvorenie rozhrania, ale nemožno ho použiť s metódami.
Trieda môže rozšíriť iba jednu abstraktnú triedu. Trieda môže implementovať viac ako jedno rozhranie.
Abstraktná trieda môže mať tak abstraktné, ako aj ne abstraktné metódy. Rozhranie môže mať iba abstraktné metódy.
Premenné nie sú predvolene konečné. Môže obsahovať nekonečné premenné. Premenné sú predvolene konečné v rozhraní.
Abstraktná trieda môže zabezpečiť implementáciu rozhrania. Rozhranie nemôže zabezpečiť implementáciu abstraktnej triedy.
Môže mať metódy s implementáciami. Poskytuje absolútnu abstrakciu a nemôže mať implementáciu metód.
Môže mať modifikátory verejného, ​​súkromného, ​​statického a chráneného prístupu. Metódy sú implicitne verejné a abstraktné v rozhraní Java.
Nepodporuje viacnásobné dedičstvo. Podporuje viac dedičstiev.
Je ideálny pre perspektívu opätovného použitia kódu a vývoja. Je ideálny pre vyhlásenie typu.

Súhrnné body týkajúce sa abstraktnej triedy a rozhrania v jazyku Java

Ako abstrakcia sa používa abstraktná trieda aj rozhranie; majú však spravodlivý podiel na rozdieloch. Hlavný rozdiel medzi nimi spočíva v metódach abstrakcie. Zatiaľ čo prvé môžu alebo nemusia mať abstraktné metódy, druhé sú implicitne abstraktné. Abstraktná trieda môže mať abstraktné aj neantraktívne metódy. Rozhranie, na druhej strane, môže mať iba abstraktné metódy, takže nemôže mať implementáciu, čo jednoducho znamená, že rozhranie nemôže mať ne abstraktné metódy. Abstraktnú triedu nie je možné vytvoriť, čo zakazuje vytvorenie objektu. Rozhranie, na druhej strane, môže vyzerať ako trieda, ale nie je.