Gränssnitt mot abstrakt klass i Java: Vad är skillnaden?

Innehållsförteckning:

Anonim

Vad är 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 för ett gränssnitt är abstrakta metoder.

Ett gränssnitt kan inte instansieras. Klasser som implementerar gränssnitt kan dock instanseras. Gränssnitt innehåller aldrig instansvariabler, men de kan innehålla offentliga statiska slutliga variabler (dvs. konstantklassvariabler)

Vad är abstrakt klass?

En klass som har det abstrakta nyckelordet i sin deklaration kallas abstrakt klass. Abstrakta klasser bör ha minst en abstrakt metod. , dvs metoder utan kropp. Det kan ha flera konkreta metoder.

Abstrakta klasser låter dig skapa ritningar för betongklasser. Men den ärvande klassen bör implementera den abstrakta metoden.

Abstrakta klasser kan inte initieras.

Viktiga skäl för användning av gränssnitt

  • Gränssnitt används för att uppnå abstraktion.
  • Designad för att stödja dynamisk metodupplösning vid körningstid
  • 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 standardfunktionalitet för underklasserna.
  • Ger en mall för framtida specifika klasser
  • Hjälper dig att definiera ett gemensamt gränssnitt för dess underklasser
  • Abstrakt klass möjliggör återanvändning av kod.

Interface Vs. Abstrakt klass

En abstrakt klass tillåter dig att skapa funktioner 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 endast utvidga en abstrakt klass medan en klass kan implementera flera gränssnitt.

Parametrar Gränssnitt Abstrakt klass
Hastighet Långsam Snabb
Flera arv Implementera flera gränssnitt Endast en abstrakt klass
Strukturera Abstrakta metoder Abstrakta & konkreta metoder
När ska man använda den? Framtida förbättring För att undvika oberoende
Arv / Implementering En klass kan implementera flera gränssnitt Klassen kan bara ärva en abstrakt klass
Standardimplementering När du lägger till nya saker i gränssnittet är det en mardröm att hitta alla implementatorer och implementera nyligen definierade saker. Vid abstrakt klass kan du dra nytta av standardimplementeringen.
Åtkomstmodifierare Gränssnittet har inte åtkomstmodifierare. Allt som definieras i gränssnittet antas vara offentlig modifierare. Abstrakt klass kan ha en åtkomstmodifierare.
När ska man använda den? Det är bättre att använda gränssnittet när olika implementeringar bara delar metodsignatur. Polymorf hierarki av värdetyper. Den ska användas när olika implementeringar av samma slag har ett gemensamt beteende.
Datafält gränssnittet kan inte innehålla datafält. klassen kan ha datafält.
Standard för flera arv 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 ge någon kod. En abstrakt klass kan ge fullständig standardkod som bör åsidosättas.
Användning av Access-modifierare Du kan inte använda åtkomstmodifierare för metod, egenskaper etc. Du kan använda en abstrakt klass som innehåller åtkomstmodifierare.
Användande Gränssnitt hjälper till att definiera perifera förmågor för en klass. En abstrakt klass definierar klassens 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 förstörare Ett gränssnitt kan inte deklarera konstruktörer eller förstörare. En abstrakt klass kan förklara konstruktörer och destruktörer.
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änssnittsnyckelord är det valfritt att förklara en metod som ett abstrakt. I en abstrakt klass är det abstrakta nyckelordet obligatoriskt för att förklara en metod som ett abstrakt.
Klass typ 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 abstrakt klass i Java

Gränssnittssyntax

interface name{//methods}

Exempel på Java-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 klasssexempel:

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 " + (obj.b * obj.b));}}