Abstrakt klass mot gränssnitt
Abstrakt klass och gränssnitt ä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 genomföra ett kontrakt. Abstrakt klass är en klass som inte kan initialiseras men kan utökas. Gränssnitt är en typ som måste implementeras av andra klasser. I Java deklareras abstraktklasser med abstrakt nyckelord, medan gränssnittsnyckelordet 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 initieras (en instans av den klassen kan inte skapas). Så, abstrakta klasser är bara meningsfulla att ha om programmeringsspråket stöder arv (förmåga att skapa underklasser från att utvidga en klass). Abstraktklasser representerar vanligtvis ett abstrakt begrepp eller en enhet med delvis eller ingen implementering. Därför fungerar abstrakta klasser som föräldraklasser från vilka barnklasser härrör så att barnklassen delar 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 utvidgar 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 abstraktklass. 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 att den kommer att ha element som måste kompletteras med de ärvande underklasserna. Detta är ett trevligt sätt att skapa ett kontrakt mellan två programmerare, vilket förenklar uppgifter inom programutveckling. 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 nyckelord används för att implementera ett gränssnitt av en klass (på Java-programmeringsspråk). Vanligtvis innehåller ett gränssnitt endast metodesignaturer och konstanta deklarationer. Alla gränssnitt som implementerar ett visst gränssnitt bör implementera alla metoder som definieras i gränssnittet, eller deklareras som en abstrakt klass. I Java kan typen av en objektreferens definieras som en gränssnitttyp. Men det objektet måste antingen vara null eller bör innehålla ett objekt i en klass som implementerar just det gränssnittet. Med Implements-nyckelordet i Java kan du implementera flera gränssnitt i en enda klass.
Vad är skillnaden mellan abstrakt klass och gränssnitt?
Abstrakta klasser representerar vanligtvis ett abstrakt begrepp eller en enhet med delvis 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 ska 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. Men ett gränssnitt kan utöka en klass.