logo

Rozdíl mezi abstraktní třídou a rozhraním

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řídaRozhraní
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