Skillnaden mellan abstrakt klass och gränssnitt i Java

Nyckelskillnaden mellan abstrakt klass och gränssnitt i Java

  • I Interface kan en klass implementera flera gränssnitt, medan klassen bara kan ärva en abstrakt klass.
  • In Interface har inga åtkomstmodifierare. Allt som definieras i gränssnittet antas ha en offentlig modifierare, medan abstrakt klass kan ha en åtkomstmodifierare.
  • Gränssnittet kan inte innehålla datafält, medan abstraktklassen kan ha datafält.
  • Gränssnitt hjälper till att definiera en klasss perifera förmågor, medan en abstrakt klass definierar en klasss identitet.

Gränssnitt vs abstrakt klass i Java

Vad är en abstrakt klass?

En klass som har det abstrakta nyckelordet i sin deklaration kallas abstrakt klass. Abstrakta klasser bör ha noll eller fler abstrakta metoder. dvs metoder utan kropp. Det kan ha flera konkreta metoder. Abstrakta klasser låter dig skapa ritningar för konkreta klasser. Men den ärvda klassen bör implementera den abstrakta metoden. Abstrakta klasser kan inte instansieras.

Viktiga skäl för att använda gränssnitt

  • Gränssnitt används för att uppnå abstraktion.
  • Designad för att stödja dynamisk metodupplösning under körning
  • Det hjälper dig att uppnå lös koppling.
  • Låter dig skilja definitionen av en metod från arvshierarkin

Viktiga skäl för att använda abstrakt klass

  • Abstrakta klasser erbjuder standardfunktioner för underklasserna.
  • Tillhandahåller en mall för framtida specifika klasser
  • Hjälper dig att definiera ett gemensamt gränssnitt för dess underklasser
  • Abstrakt klass tillåter återanvändning av kod.

Vad är ett gränssnitt?

Gränssnittet är en ritning som kan användas för att implementera en klass. Gränssnittet innehåller inga konkreta metoder (metoder som har kod). Alla metoder i ett gränssnitt är abstrakta metoder. Ett gränssnitt kan inte instansieras. Men klasser som implementerar gränssnitt kan instansieras. Gränssnitt innehåller aldrig instansvariabler men de kan innehålla offentliga statiska slutvariabler (dvs konstanta klassvariabler)

Skillnaden mellan gränssnitt och abstrakt klass i Java

En abstrakt klass tillåter dig att skapa funktionalitet som underklasser kan implementera eller åsidosätta medan ett gränssnitt bara tillåter dig att ange funktionalitet men inte att implementera den. En klass kan bara utöka en abstrakt klass medan en klass kan implementera flera gränssnitt.

parametrar Gränssnitt Abstrakt klass
Fart Sakta Snabb
Flera arv Implementera flera gränssnitt Endast en abstrakt klass
Structure Abstrakta metoder Abstrakta & konkreta metoder
När du ska använda den Framtida förbättring För att undvika självständighet
Arv/ Genomförande En klass kan implementera flera gränssnitt Klassen kan bara ärva en abstrakt klass
Standardimplementering Medan man lägger till nya saker till gränssnittet är det en mardröm att hitta alla implementerare och implementera nydefinierade saker. I fall av abstrakt klass kan du dra nytta av standardimplementeringen.
Åtkomstmodifierare Gränssnittet har inga åtkomstmodifierare. Allt som definieras i gränssnittet antas vara offentlig modifierare. Abstrakt klass kan ha en åtkomstmodifierare.
När du ska använda den Det är bättre att använda gränssnitt när olika implementeringar endast delar metodsignatur. Polymorf hierarki av värdetyper. Det bör användas när olika implementeringar av samma slag delar ett gemensamt beteende.
Datafält gränssnittet kan inte innehålla datafält. klassen kan ha datafält.
Multipelt arv Standard En klass kan implementera många gränssnitt. En klass ärver bara en abstrakt klass.
Genomförande Ett gränssnitt är abstrakt så att det inte kan tillhandahålla någon kod. En abstrakt klass kan ge fullständig standardkod som bör åsidosättas.
Användning av åtkomstmodifierare Du kan inte använda åtkomstmodifierare för metoden, egenskaper, etc. Du kan använda en abstrakt klass som innehåller åtkomstmodifierare.
Användning Gränssnitt hjälper till att definiera en klasss perifera förmågor. En abstrakt klass definierar en klasss identitet.
Definierade fält Inga fält kan definieras En abstrakt klass låter dig definiera både fält och konstanter
Arv Ett gränssnitt kan ärva flera gränssnitt men kan inte ärva en klass. En abstrakt klass kan ärva en klass och flera gränssnitt.
Konstruktör eller destruktörer Ett gränssnitt kan inte deklarera konstruktörer eller destruktörer. En abstrakt klass kan deklarera konstruktörer och förstörare.
Gräns ​​för tillägg Det kan utöka valfritt antal gränssnitt. Det kan bara utöka en klass eller en abstrakt klass åt gången.
Abstrakt nyckelord I ett abstrakt gränssnitt är nyckelordet valfritt för att deklarera en metod som ett abstrakt. I en abstrakt klass är det abstrakta nyckelordet obligatoriskt för att deklarera en metod som ett abstrakt.
Klasstyp Ett gränssnitt kan endast ha offentliga abstrakta metoder. En abstrakt klass har skyddade och offentliga abstrakta metoder.

Exempelkod för gränssnitt och abstrakt klass i Java

Följande är exempelkod för att skapa ett gränssnitt och en abstrakt klass i Java

Gränssnittssyntax

interface name{
//methods
}

Java Exempel på gränssnitt:

interface Pet {
    public void test();
}
class Dog implements Pet {
    public void test() {
        System.out.println("Interface Method Implemented");
    }
    public static void main(String args[]) {
        Pet p = new Dog();
        p.test();
    }
}

Abstrakt klasssyntax

abstract class name{
    // code
}

Abstrakt klassexempel:

abstract class Shape {
    int b = 20;
    abstract public void calculateArea();
}

public class Rectangle extends Shape {
    public static void main(String args[]) {
        Rectangle obj = new Rectangle();
        obj.b = 200;
        obj.calculateArea();
    }
    public void calculateArea() {
        System.out.println("Area is " + (b * b));
    }
}