Abstraktní třída a rozhraní se používají k dosažení abstrakce, kde můžeme deklarovat abstraktní metody. Abstraktní třída a rozhraní nelze vytvořit instanci.
Existuje však mnoho rozdílů mezi abstraktní třídou a rozhraním, které jsou uvedeny níže.
Abstraktní třída | Rozhraní |
---|---|
1) Abstraktní třída může mají abstraktní a neabstraktní metody. | Rozhraní může mít pouze abstraktní metody. Od Java 8 může mít výchozí a statické metody taky. |
2) Abstraktní třída nepodporuje vícenásobnou dědičnost . | Rozhraní podporuje vícenásobnou dědičnost . |
3) Abstraktní třída může mít konečné, nekonečné, statické a nestatické proměnné . | Rozhraní má pouze statické a konečné proměnné . |
4) Abstraktní třída může zajistit implementaci rozhraní . | Rozhraní nemůže poskytnout implementaci abstraktní třídy . |
5) abstraktní klíčové slovo se používá k deklaraci abstraktní třídy. | The klíčové slovo rozhraní se používá k deklaraci rozhraní. |
6) An abstraktní třída může rozšířit další třídu Java a implementovat více rozhraní Java. | An rozhraní může rozšířit pouze další rozhraní Java. |
7) An abstraktní třída lze rozšířit pomocí klíčového slova 'extends'. | An rozhraní lze implementovat pomocí klíčového slova 'implements'. |
8) Do Javy abstraktní třída může mít členy třídy jako soukromé, chráněné atd. | Členové rozhraní Java jsou ve výchozím nastavení veřejní. |
9) Příklad: veřejná abstraktní třída Tvar{ veřejný abstrakt void draw(); } | Příklad: veřejné rozhraní Drawable{ void draw(); } |
Jednoduše řečeno, abstraktní třída dosahuje částečné abstrakce (0 až 100 %), zatímco rozhraní dosahuje úplné abstrakce (100 %).
Příklad abstraktní třídy a rozhraní v Javě
Podívejme se na jednoduchý příklad, kde používáme rozhraní i abstraktní třídu.
//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(); }}Otestujte to hned
Výstup:
I am a I am b I am c I am d