Skillnaden mellan abstrakt klass och gränssnitt

Skillnaden mellan abstrakt klass och gränssnitt
Skillnaden mellan abstrakt klass och gränssnitt

Video: Skillnaden mellan abstrakt klass och gränssnitt

Video: Skillnaden mellan abstrakt klass och gränssnitt
Video: Merger Vs. Joint Venture- Know the Similarities & Differences. 2024, Juli
Anonim

Abstract Class vs Interface

Abstract class och Interface är två objektorienterade konstruktioner som finns i många objektorienterade programmeringsspråk som Java. Abstrakt klass kan betraktas som en abstrakt version av en vanlig (konkret) klass, medan ett gränssnitt kan betraktas som ett sätt att implementera ett kontrakt. Abstrakt klass är en klass som inte kan initieras men som kan utökas. Gränssnitt är en typ som måste implementeras av andra klasser. I Java deklareras abstrakta klasser med abstrakt nyckelord, medan nyckelordet gränssnitt används för att definiera ett gränssnitt.

Vad är en abstrakt klass?

Vanligtvis kan abstrakta klasser, även kända som Abstrakta basklasser (ABC), inte instansieras (en instans av den klassen kan inte skapas). Så abstrakta klasser är bara meningsfulla att ha om programmeringsspråket stöder arv (möjlighet att skapa underklasser genom att utöka en klass). Abstrakta klasser representerar vanligtvis ett abstrakt koncept eller entitet med partiell eller ingen implementering. Därför fungerar abstrakta klasser som överordnade klasser från vilka underordnade klasser härleds så att den underordnade klassen kommer att dela de ofullständiga funktionerna i föräldraklassen och funktionalitet kan läggas till för att slutföra dem.

Abstrakta klasser kan innehålla abstrakta metoder. Underklasser som utökar en abstrakt klass kan implementera dessa (ärvda) abstrakta metoder. Om barnklassen implementerar alla sådana abstrakta metoder är det en konkret klass. Men om det inte gör det blir barnklassen också en abstrakt klass. Vad allt detta betyder är att när programmeraren nominerar en klass som en abstrakt, säger hon att klassen kommer att vara ofullständig och den kommer att ha element som måste kompletteras av de ärvda underklasserna. Detta är ett trevligt sätt att skapa ett kontrakt mellan två programmerare, vilket förenklar uppgifter inom mjukvaruutveckling. Programmeraren, som skriver kod för att ärva, måste följa metoddefinitionerna exakt (men kan naturligtvis ha sin egen implementering).

Vad är ett gränssnitt?

Ett gränssnitt är en abstrakt typ som används för att specificera ett kontrakt som ska implementeras av klasser som implementerar det gränssnittet. Gränssnittsnyckelordet används för att definiera ett gränssnitt och Implements nyckelordet används för att implementera ett gränssnitt av en klass (i Java programmeringsspråk). Vanligtvis kommer ett gränssnitt bara att innehålla metodsignaturer och konstantdeklarationer. Alla gränssnitt som implementerar ett visst gränssnitt bör implementera alla metoder som definieras i gränssnittet, eller bör deklareras som en abstrakt klass. I Java kan typen av en objektreferens definieras som en gränssnittstyp. Men det objektet måste antingen vara null eller bör innehålla ett objekt av en klass, som implementerar det specifika gränssnittet. Genom att använda nyckelordet Implements i Java kan du implementera flera gränssnitt till en enda klass.

Vad är skillnaden mellan abstrakt klass och gränssnitt?

Abstrakta klasser representerar vanligtvis ett abstrakt koncept eller en enhet med partiell eller ingen implementering. Å andra sidan är ett gränssnitt en abstrakt typ som används för att specificera ett kontrakt som ska implementeras av klasser. Abstrakta klasser bör ärvas (eller utökas), medan gränssnitt bör implementeras. Abstrakta klasser kan innehålla abstrakta metoder, medan ett gränssnitt endast bör innehålla abstrakta metoder. Abstrakta klasser kan innehålla alla variabler, men gränssnitt kan bara definiera konstanter. En klass kan inte ärva från mer än en abstrakt klass men kan implementera flera gränssnitt. Ett gränssnitt kan inte implementera ett annat gränssnitt. Ett gränssnitt kan dock utöka en klass.

Rekommenderad: