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.
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.
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é.
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. |
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.