Skillnad mellan abstrakt klass och gränssnitt i Java

Abstrakt klass och gränssnitt båda används främst för abstraktion, men de skiljer sig väldigt olika från varandra. Båda är kärnan i Java men har egna användningsområden. Medan båda termerna kan vara synonymt med varandra kan de inte användas omväxlande.

Det finns signifikanta skillnader mellan de två. Medan en gränssnittsmetod är abstrakt som standard kan en abstrakt innehålla både abstrakta och icke-abstrakta metoder. Tja, sedan Java 8 har gränssnitt också metodimplementeringar och de kan ha både statiska och standardmetoder i Java. Låt oss studera skillnaden mellan de två i detalj.

Vad är en abstrakt klass i Java?

En abstrakt klass i Java är en klass som förklaras abstrakt - det kan eller kanske inte innehålla abstrakta metoder. Det liknar ett Java-gränssnitt förutom att det kan innehålla standardmetodimplementering. Precis som i objektorienterad programmering uppnås abstraktion i Java med abstrakta klasser och gränssnitt. I Java innebär abstraktion att gömma de irrelevanta detaljerna från användaren för att endast fokusera på de väsentliga detaljerna för att öka effektiviteten och därmed minska komplexiteten. Nyckelordet "abstrakt" används för att skapa en abstrakt klass strax innan klassens nyckelord i klassdeklarationen.

En abstrakt klass kan innehålla abstraktionsmetoder (metoder utan kropp), men om en klass har minst en abstraktionsmetod, måste den förklaras abstrakt. Icke abstrakta metoder kan emellertid bara användas i en abstrakt klass, men endast för att implementera standardbeteende. Metoderna i en abstrakt klass kan ha åtkomstmodifierare som privata, offentliga, statiska och skyddade, beroende på synlighetsnivån. En abstrakt klass kan inte instansieras och det ger inte 100 procent abstraktion på grund av att det kan ha konkret metod.

Vad är ett gränssnitt?

Ett gränssnitt ser dock ut som en klass, det är det inte. Eftersom Java inte stöder flera arv, är ett gränssnitt ibland idealiskt för att ge grunden för klasshierarkin. Ett gränssnitt är mer av en plan för en klass som också används för att uppnå abstraktion i Java. Den innehåller abstrakta metoder och statiska konstanter. Enkelt uttryckt är ett gränssnitt en samling abstrakta metoder som används för att specificera ett beteende som klassen ska genomföra. Till skillnad från abstrakt klass ger ett gränssnitt full abstraktion i Java. Det kan ha både metoder och variabler som en klass, men de metoder som deklareras i gränssnitt är som standard abstrakta.

Skillnad mellan abstrakt klass och gränssnitt i Java

  1. "Multiple arv" av abstrakt klass och gränssnitt i Java - Trots att både abstrakt klass och gränssnitt används främst för abstraktion, är de ganska olika från varandra. Medan en abstrakt klass är en klass är ett gränssnitt ett gränssnitt. Det betyder att ett gränssnitt endast kan förlänga ett annat Java-gränssnitt, en abstrakt klass kan implementera flera arv i Java. Jo, Java stöder inte flera arv, men man kan implementera flera arv i Java.
  2. "Metodtyp" av abstrakt klass och gränssnitt i Java - Den andra stora skillnaden mellan de två är att medan ett gränssnitt endast kan ha abstrakta metoder kan en abstrakt klass ha både abstrakta och icke-abstrakta metoder. Men sedan Java 8 kan ett gränssnitt också ha standard och statiska metoder.
  3. "Access Modifiers" av abstrakt klass och gränssnitt i Java - En abstrakt klass kan ha offentliga, privata och skyddade åtkomstmodifierare, men metoder för gränssnitt är implicit offentliga och abstrakta. Du kan inte använda någon annan åtkomstmodifierare med gränssnittsmetoder ".
  4. "Implementering" av abstrakt klass och gränssnitt i Java - En abstrakt klass kan ge genomförandet av ett gränssnitt. Ett gränssnitt, å andra sidan, kan inte ge genomförandet av en abstrakt klass.
  5. "Nyckelord" för abstrakt klass och gränssnitt i Java- Medan "abstrakt" nyckelord används för att deklarera en abstrakt klassmetod som abstrakt, är gränssnitt dock en helt annan historia; De kan bara ha offentliga, statiska slutkonstanter och metoddeklarationer.
  6. "Använd" av abstrakt klass och gränssnitt i Java - Medan ett gränssnitt är idealiskt för typdeklaration är en abstrakt klass bäst lämpad för kodåtervinnings och evolutionsperspektiv. Ett gränssnitt ser ut som en klass, men det är inte en klass.
  7. "Tillförlitlighet" av abstrakt klass och gränssnitt i Java- En annan stor skillnad mellan en abstrakt klass och ett gränssnitt är att den tidigare är lite snabbare än den senare eftersom en sökning vanligtvis är inblandad i ett gränssnitt innan någon överdriven metod kallas i Java.
  8. "Slutliga variabler" av abstrakt klass och gränssnitt i Java - De variabler som deklareras i ett gränssnitt är som standard slutliga, medan en abstrakt klass kan innehålla eller ej innehåller slutliga variabler.

Abstrakt klass vs gränssnitt i Java: Jämförelsetabell

Abstrakt klass Gränssnitt
Abstrakt nyckelord används för att skapa en abstrakt klass och den kan användas med metoder. Gränssnittssökord används för att skapa ett gränssnitt men det kan inte användas med metoder.
En klass kan utsträcka endast en abstrakt klass. En klass kan implementera mer än ett gränssnitt.
En abstrakt klass kan ha både abstrakta och icke-abstrakta metoder. Ett gränssnitt kan endast ha abstrakta metoder.
Variablerna är inte slutliga som standard. Det kan innehålla icke-slutliga variabler. Variabler är slutliga som standard i ett gränssnitt.
En abstrakt klass kan ge genomförandet av ett gränssnitt. Ett gränssnitt kan inte ge genomförandet av en abstrakt klass.
Det kan ha metoder med implementeringar. Det ger absolut abstraktion och kan inte ha metodimplementeringar.
Det kan ha offentliga, privata, statiska och skyddade åtkomstmodifierare. Metoderna är implicit offentliga och abstrakta i Java-gränssnittet.
Det stöder inte flera arv. Den stöder flera arv.
Den är idealisk för kodåtervinning och evolutionsperspektiv. Den är idealisk för Typdeklaration.

Sammanfattningspunkter på abstrakt klass och gränssnitt i Java

Både abstrakt klass och gränssnitt används för abstraktion; De har emellertid sin rättvisa andel av skillnaderna. Huvudskillnaden mellan de två drivs av abstraktionsmetoder. Medan den förra kan eller kanske inte har abstrakta metoder, är den sistnämnda implicit abstrakt. En abstrakt klass kan ha både abstrakta och icke-abstrakta metoder. Ett gränssnitt, å andra sidan, kan bara ha abstrakta metoder, så de kan inte ha genomförande, vilket helt enkelt betyder att ett gränssnitt inte kan ha icke-abstrakta metoder. En abstrakt klass kan inte instanseras som förbjuder skapande av ett objekt. Ett gränssnitt kan å andra sidan se ut som en klass, men det är det inte.