logo

Skillnaden mellan abstrakt klass och gränssnitt

Abstrakt klass och gränssnitt används båda för att uppnå abstraktion där vi kan deklarera de abstrakta metoderna. Båda abstrakt klass och gränssnitt kan inte instansieras.

Men det finns många skillnader mellan abstrakt klass och gränssnitt som ges nedan.

Abstrakt klassGränssnitt
1) Abstrakt klass kan har abstrakta och icke-abstrakta metoder.Gränssnitt kan ha bara abstrakt metoder. Sedan Java 8 kan det ha standardmetoder och statiska metoder också.
2) Abstrakt klass stöder inte multipelt arv .Gränssnitt stöder multipelt arv .
3) Abstrakt klass kan ha slutliga, icke-slutliga, statiska och icke-statiska variabler .Interface har endast statiska och slutliga variabler .
4) Abstrakt klass kan tillhandahålla genomförandet av gränssnitt .Gränssnitt kan inte tillhandahålla implementeringen av abstrakt klass .
5) Den abstrakt nyckelord används för att deklarera abstrakt klass.De gränssnitts nyckelord används för att deklarera gränssnitt.
6) An abstrakt klass kan utöka en annan Java-klass och implementera flera Java-gränssnitt.En gränssnitt kan bara utöka ett annat Java-gränssnitt.
7) An abstrakt klass kan utökas med nyckelordet 'förlänger'.En gränssnitt kan implementeras med nyckelordet 'implementerar'.
8) Till Java abstrakt klass kan ha klassmedlemmar som privata, skyddade osv.Medlemmar av ett Java-gränssnitt är offentliga som standard.
9) Exempel:
offentlig abstrakt klass Shape{
public abstract void draw();
}
Exempel:
offentligt gränssnitt Drawable{
void draw();
}

Helt enkelt, abstrakt klass uppnår partiell abstraktion (0 till 100%) medan gränssnitt uppnår fullständig abstraktion (100%).

Exempel på abstrakt klass och gränssnitt i Java

Låt oss se ett enkelt exempel där vi använder både gränssnitt och abstrakt klass.

 //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(); }} 
Testa det nu

Produktion:

 I am a I am b I am c I am d