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.
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.
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.
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. |
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.