Abstrakt klasse vs grænseflade i Java - forskel mellem dem

Nøgleforskel mellem abstrakt klasse og grænseflade i Java

  • I Interface kan en klasse implementere flere grænseflader, hvorimod klassen kun kan arve én abstrakt klasse.
  • In Interface har ikke adgangsmodifikatorer. Alt defineret inde i grænsefladen antages at have en offentlig modifikator, hvorimod abstrakt klasse kan have en adgangsmodifikator.
  • Interfacet kan ikke indeholde datafelter, mens den abstrakte klasse kan have datafelter.
  • Grænseflader hjælper med at definere en klasses perifere evner, hvorimod en abstrakt klasse definerer en klasses identitet.

Interface vs abstrakt klasse i Java

Hvad er abstrakt klasse?

En klasse, som har det abstrakte nøgleord i sin erklæring, kaldes abstrakt klasse. Abstrakte klasser skal have nul eller flere abstrakte metoder. dvs. metoder uden krop. Det kan have flere konkrete metoder.

Abstrakte klasser giver dig mulighed for at oprette tegninger til konkrete klasser. Men den arvende klasse bør implementere den abstrakte metode.

Abstrakte klasser kan ikke instantieres.

Vigtige grunde til brug af grænseflader

  • Grænseflader bruges til at opnå abstraktion.
  • Designet til at understøtte dynamisk metodeopløsning under kørsel
  • Det hjælper dig med at opnå løs kobling.
  • Giver dig mulighed for at adskille definitionen af ​​en metode fra arvehierarkiet

Vigtige grunde til at bruge abstrakt klasse

  • Abstrakte klasser tilbyder standardfunktionalitet for underklasserne.
  • Giver en skabelon til fremtidige specifikke klasser
  • Hjælper dig med at definere en fælles grænseflade for dens underklasser
  • Abstrakt klasse tillader genbrug af kode.

Hvad er Interface?

Interfacet er en blueprint, der kan bruges til at implementere en klasse. Interfacet indeholder ingen konkrete metoder (metoder der har kode). Alle metoderne i en grænseflade er abstrakte metoder.

En grænseflade kan ikke instansieres. Klasser, der implementerer grænseflader, kan dog instansieres. Grænseflader indeholder aldrig instansvariabler, men de kan indeholde offentlige statiske slutvariabler (dvs. konstante klassevariabler)

Forskellen mellem grænseflade og abstrakt klasse i Java

En abstrakt klasse tillader dig at lave funktionalitet, som underklasser kan implementere eller tilsidesætte, mens en grænseflade kun tillader dig at angive funktionalitet, men ikke at implementere den. En klasse kan kun udvide én abstrakt klasse, mens en klasse kan implementere flere grænseflader.

parametre grænseflade Abstrakt klasse
Speed Langsom Hurtigt
Flere arv Implementer flere grænseflader Kun én abstrakt klasse
Struktur Abstrakte metoder Abstrakte og konkrete metoder
Hvornår skal du bruge det? Fremtidig forbedring For at undgå uafhængighed
Arv/ Implementering En klasse kan implementere flere grænseflader Klassen kan kun arve én abstrakt klasse
Standardimplementering Mens du tilføjer nye ting til grænsefladen, er det et mareridt at finde alle implementere og implementere nydefinerede ting. I tilfælde af abstrakt klasse kan du drage fordel af standardimplementeringen.
Adgangsmodifikatorer Interfacet har ikke adgangsmodifikatorer. Alt defineret inde i grænsefladen antages at være offentlig modifikator. Abstrakt klasse kan have en adgangsmodifikator.
Hvornår skal du bruge det? Det er bedre at bruge interface, når forskellige implementeringer kun deler metodesignatur. Polymorfisk hierarki af værdityper. Det bør bruges, når forskellige implementeringer af samme slags deler en fælles adfærd.
Datafelter grænsefladen kan ikke indeholde datafelter. klassen kan have datafelter.
Multiple Inheritance Standard En klasse kan implementere adskillige grænseflader. En klasse arver kun én abstrakt klasse.
Implementering En grænseflade er abstrakt, så den ikke kan levere nogen kode. En abstrakt klasse kan give komplet standardkode, som bør tilsidesættes.
Brug af adgangsmodifikatorer Du kan ikke bruge adgangsmodifikatorer til metoden, egenskaber osv. Du kan bruge en abstrakt klasse, som indeholder adgangsmodifikatorer.
Brug Grænseflader hjælper med at definere en klasses perifere evner. En abstrakt klasse definerer en klasses identitet.
Definerede felter Ingen felter kan defineres En abstrakt klasse giver dig mulighed for at definere både felter og konstanter
Arv En grænseflade kan arve flere grænseflader, men kan ikke arve en klasse. En abstrakt klasse kan arve en klasse og flere grænseflader.
Konstruktør eller destruktorer En grænseflade kan ikke erklære konstruktører eller destruktorer. En abstrakt klasse kan erklære konstruktører og destruktorer.
Grænse for udvidelser Det kan udvide et vilkårligt antal grænseflader. Det kan kun udvide én klasse eller én abstrakt klasse ad gangen.
Abstrakt søgeord I en abstrakt grænseflade er nøgleordet valgfrit for at erklære en metode som et abstrakt. I en abstrakt klasse er det abstrakte nøgleord obligatorisk for at erklære en metode som et abstrakt.
Klassetype En grænseflade kan kun have offentlige abstrakte metoder. En abstrakt klasse har beskyttede og offentlige abstrakte metoder.

Eksempelkode til grænseflade og abstrakt klasse i Java

Following er eksempelkode til at skabe en grænseflade og abstrakt klasse i Java

Interface syntaks

interface name{
//methods
}

Eksempel på Java-grænseflade:

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 klassesyntaks

abstract class name{
    // code
}

Abstrakt klasseeksempel:

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));
    }
}