Rozdiel kľúčov: rozhranie alebo protokol je bežný spôsob, ktorý umožňuje nesúvisiacim objektom navzájom komunikovať. Predstavuje dohodnuté správanie, ktoré uľahčuje interakciu medzi týmito dvoma objektmi. Abstraktná trieda je trieda objektov, ktoré nemožno inštancovať alebo nastaviť inštanciu objektu. Táto trieda nemusí mať žiadnu implementáciu alebo môže mať neúplnú implementáciu.
Java je programovací jazyk, ktorý bol ovplyvnený jazykom C. Odvodzuje veľkú časť svojej syntaxe z C a C ++, avšak má menej zariadení nižšej úrovne ako jedna. Java je univerzálny programovací jazyk, ktorý je navrhnutý tak, aby mal menej implementačných závislostí v porovnaní s predchádzajúcimi jazykmi. Je súbežný, založený na triedach a objektovo orientovaný jazyk.
Java bol vyvinutý Jamesom Goslingom v spoločnosti Sun Microsystems a bol vydaný v roku 1995. Bol pôvodne prepustený ako základná súčasť platformy Java spoločnosti Sun Microsystems. Spoločnosť Sun odvtedy licencovala väčšinu svojich technológií Java pod licenciou GNU General Public License. To znamená, že všetky technológie, ktoré sú licencované pod licenciou GNU General Public License, sú otvorené a sú dostupné bezplatne. Spoločnosť Sun Microsystems sa nakoniec zlúčila do spoločnosti Oracle Corporation. Od roku 2012 sa jazyk Java stal jedným z najpopulárnejších programovacích jazykov na použitie. Platí to najmä pre webové aplikácie klient-server. Mnoho ďalších systémov vyvinulo alternatívne implementácie technológií Sun, ako napríklad GNU Compiler for Java a GNU Classpath.
Abstraktná trieda je trieda objektov, ktoré nemožno inštancovať alebo nastaviť inštanciu objektu. Táto trieda nemusí mať žiadnu implementáciu alebo môže mať neúplnú implementáciu. Môže mať aj abstraktné metódy alebo vlastnosti, ktoré sú zdieľané všetkými podtriedami. V niektorých programovacích jazykoch sú abstraktné typy bez implementácie známe ako rozhrania. V jazyku Java je možné vytvoriť abstraktný typ pomocou kľúčového slova "abstrakt" v definícii triedy. Účelom abstraktnej triedy je umiestniť všetky metódy, ktoré nie sú implementované v abstraktnej triede, a nechať ju v podtriede, aby určila, ako implementovať tieto triedy. Ak má trieda jedinej abstraktnú metódu, musí byť trieda deklarovaná ako abstraktná trieda, hoci nie je potrebné mať aspoň jednu metódu na deklaráciu abstraktnej triedy.
Malliktalksjava.in uvádza hlavné rozdiely medzi rozhraním a abstraktom ako:
- Abstraktná trieda má konštruktéra, ale rozhranie nie je.
- Abstraktné triedy môžu mať implementácie pre niektorých svojich členov (metódy), ale rozhranie nemôže mať implementáciu pre žiadneho z jeho členov.
- Abstraktné triedy by mali mať iné podtriedy, ktoré budú zbytočné.
- Rozhrania musia mať implementácie inými triedami, ktoré budú zbytočné
- Iba rozhranie môže rozšíriť ďalšie rozhranie, ale každá trieda môže rozšíriť abstraktnú triedu.
- Všetky premenné v rozhraniach sú štandardné
- Rozhrania poskytujú formu viacnásobného dedičstva. Trieda môže rozšíriť iba jednu ďalšiu triedu.
- Rozhrania sú obmedzené na verejné metódy a konštanty bez implementácie. Abstraktné triedy môžu mať čiastočnú implementáciu, chránené časti, statické metódy atď.
- Trieda môže implementovať niekoľko rozhraní. Ale v prípade abstraktnej triedy môže trieda rozšíriť iba jednu abstraktnú triedu.
- Rozhrania sú pomalé, pretože vyžadujú ďalšiu navigáciu na nájdenie zodpovedajúcej metódy v aktuálnej triede. Abstraktné triedy sú rýchle.
- Modifikátor prístupnosti (verejný / súkromný / interný) je povolený pre abstraktnú triedu. Rozhranie neumožňuje modifikátor prístupnosti
- Abstraktná trieda môže obsahovať úplné alebo neúplné metódy. Rozhrania môžu obsahovať iba podpis metódy, ale žiadne telo. Takže abstraktná trieda môže implementovať metódy, ale rozhranie nemôže implementovať metódy.
- Abstraktná trieda môže obsahovať polia, konštruktory alebo deštruktory a implementovať vlastnosti. Rozhranie nesmie obsahovať polia, konštruktory alebo deštruktory a má len podpis vlastníctva, ale žiadnu implementáciu.
- Rôzne modifikátory prístupu, ako sú abstraktné, chránené, interné, verejné, virtuálne atď., Sú užitočné v abstraktných triedach, ale nie v rozhraniach.
- Rozsah abstraktov je odvodený od triedy.
- Rozsah rozhrania je až na akúkoľvek úroveň dedičského reťazca.
Informácie pre tabuľku sú zdvorilosťou codeproject.com a mindprod.com
Rozhranie | Abstraktná trieda | |
Viacnásobné dedičstvo | Trieda môže zdediť niekoľko rozhraní. | Trieda môže zdediť iba jednu abstraktnú triedu. |
Predvolená implementácia | Rozhranie nemôže poskytnúť žiadny kód, len podpis. | Abstraktná trieda môže poskytnúť kompletný, predvolený kód a / alebo len podrobnosti, ktoré je potrebné prepísať. |
Modifikátory prístupu | Rozhranie nemôže mať modifikátory prístupu pre subs, funkcie, vlastnosti atď. Všetko sa považuje za verejné. | Abstraktná trieda môže obsahovať modifikátory prístupu pre subs, funkcie, vlastnosti. |
Core vs. Peripheral | Rozhrania sa používajú na definovanie periférnych schopností triedy. Inými slovami, človek a vozidlo môžu mať dedičstvo z rozhrania IM. | Abstraktná trieda definuje jadrovú identitu triedy a tam sa používa pre objekty rovnakého typu. |
rovnorodosť | Ak rôzne implementácie zdieľajú iba podpisy metód, potom je lepšie používať rozhrania. | Ak sú rôzne implementácie rovnakého druhu a používajú bežné správanie alebo stav, potom je lepšie použiť abstraktnú triedu. |
rýchlosť | Vyžaduje viac času na nájdenie aktuálnej metódy v príslušných triedach. | rýchly |
Pridávanie funkcií | Ak pridáme novú metódu k rozhraniu, musíme sledovať všetky implementácie rozhrania a definovať implementáciu novej metódy. | Ak pridáme novú metódu do abstraktnej triedy, potom máme možnosť poskytnúť predvolenú implementáciu, a preto celý existujúci kód môže fungovať správne. |
Polia a konštanty | V rozhraniach nie je možné definovať žiadne polia. | Abstraktná trieda môže mať definované polia a konštanty. |
stručnosť | Konštantné deklarácie v rozhraní sú všetky predpokladané verejné statické konečné. | Zdieľaný kód sa môže pridať do abstraktnej triedy. |
konštanty | Len statické konečné konštanty, môžu ich použiť bez kvalifikácie v triedach implementujúcich rozhranie. | Možné sú aj inštančné aj statické konštanty. Ako konštanty je možné vypočítať statický aj inštančný kód inštancie. |
Pohodlie tretej strany | Implementácia rozhrania sa môže pridať do ktorejkoľvek existujúcej triedy tretích strán. | Trieda tretej strany musí byť prepísaná tak, aby sa rozšírila iba z abstraktnej triedy. |
is-a versus -able alebo can-do | Rozhrania sa často používajú na popísanie periférnych schopností triedy, nie na jej centrálnu identitu, napr. Trieda Automobile by mohla implementovať rozhranie Recyklovateľné, ktoré by sa mohlo vzťahovať na mnoho inak úplne nesúvisiacich objektov. | Abstraktná trieda definuje základnú identitu svojich potomkov. Implementované rozhrania vymenúvajú všeobecné veci, ktoré môže trieda robiť, nie to, čo je trieda. V kontexte jazyka Java by mali používatelia zvyčajne implementovať rozhranie Runnable, a nie rozširovať Thread, pretože nemajú skutočný záujem o poskytnutie novej funkcie Thread, ale zvyčajne chcú, aby niektorý kód mohol fungovať nezávisle. Chcú vytvoriť niečo, čo sa dá spustiť vo vlákne, nie novým druhom vlákna. Podobný je - a vs. - diskusia nastáva, keď sa rozhodnete zdediť alebo delegovať. |
Zapojiť | Používateľ môže napísať nový náhradný modul pre rozhranie, ktoré neobsahuje žiadnu páčku kódu spoločného s existujúcimi implementáciami. Keď užívateľ implementuje rozhranie, začnú od nuly bez akejkoľvek predvolenej implementácie. Používateľ musí získať nástroje od iných tried; nič nie je spojené s iným rozhraním ako niekoľkými konštantami. To dáva užívateľovi slobodu implementovať radikálne iný dizajn. | Používateľ musí používať abstraktnú triedu tak, ako je pre kódovú základňu so všetkými svojimi sprievodnými batožinami, dobrá alebo zlá. Autor abstraktnej triedy uložil používateľovi štruktúru. |
údržba | Ak kód klienta hovorí len z hľadiska rozhrania, môžete jednoducho zmeniť konkrétnu implementáciu za ním pomocou továrenskej metódy. | Ak kód klienta hovorí len v abstraktnej triede, môžete ľahko zmeniť konkrétnu implementáciu za ním pomocou továrenskej metódy. |