Abstraktná trieda a rozhranie sa používajú na dosiahnutie abstrakcie, kde môžeme deklarovať abstraktné metódy. Abstraktná trieda a rozhranie nie je možné vytvoriť.
Existuje však veľa rozdielov medzi abstraktnou triedou a rozhraním, ktoré sú uvedené nižšie.
Abstraktná trieda | Rozhranie |
---|---|
1) Abstraktná trieda môže majú abstraktné a neabstraktné metódy. | Rozhranie môže mať len abstraktné metódy. Od Java 8 môže mať predvolené a statické metódy tiež. |
2) Abstraktná trieda nepodporuje viacnásobné dedičstvo . | Rozhranie podporuje viacnásobné dedičstvo . |
3) Abstraktná trieda môže mať konečné, nekonečné, statické a nestatické premenné . | Rozhranie má iba statické a konečné premenné . |
4) Abstraktná trieda môže poskytnúť implementáciu rozhrania . | Rozhranie nemôže poskytnúť implementáciu abstraktnej triedy . |
5) abstraktné kľúčové slovo sa používa na deklarovanie abstraktnej triedy. | The kľúčové slovo rozhrania sa používa na deklarovanie rozhrania. |
6) An abstraktná trieda môže rozšíriť ďalšiu triedu Java a implementovať viacero rozhraní Java. | An rozhranie môže rozšíriť iba ďalšie rozhranie Java. |
7) An abstraktná trieda možno rozšíriť pomocou kľúčového slova „extends“. | An rozhranie možno implementovať pomocou kľúčového slova „implements“. |
8) Do Javy abstraktná trieda môžu mať členov triedy ako súkromné, chránené atď. | Členovia rozhrania Java sú štandardne verejné. |
9) Príklad: verejná abstraktná trieda Tvar{ verejný abstrakt void draw(); } | Príklad: verejné rozhranie Kresliteľné{ void draw(); } |
Jednoducho, abstraktná trieda dosahuje čiastočnú abstrakciu (0 až 100%), zatiaľ čo rozhranie dosahuje úplnú abstrakciu (100%).
Príklad abstraktnej triedy a rozhrania v Jave
Pozrime sa na jednoduchý príklad, kde používame rozhranie aj abstraktnú triedu.
//Creating interface that has 4 methods interface A{ void a();//bydefault, public and abstract void b(); void c(); void d(); } //Creating abstract class that provides the implementation of one method of A interface abstract class B implements A{ public void c(){System.out.println('I am C');} } //Creating subclass of abstract class, now we need to provide the implementation of rest of the methods class M extends B{ public void a(){System.out.println('I am a');} public void b(){System.out.println('I am b');} public void d(){System.out.println('I am d');} } //Creating a test class that calls the methods of A interface class Test5{ public static void main(String args[]){ A a=new M(); a.a(); a.b(); a.c(); a.d(); }}Vyskúšajte to
Výkon:
I am a I am b I am c I am d