Abstrakt klass mot arv
Abstrakt klass och arv är två viktiga objektorienterade begrepp som finns i många objektorienterade programmeringsspråk som Java. Abstrakt klass kan betraktas som en abstrakt version av en vanlig (konkret) klass, medan Arv tillåter nya klasser att utvidga andra klasser. Abstrakt klass är en klass som inte kan initialiseras men kan utökas. Så, abstrakta klasser är bara meningsfulla att ha om programmeringsspråket stöder arv. I Java deklareras abstraktklasser med abstrakt nyckelord, medan nyckelordet Extends används för att ärva från en (super) klass.
Vad är 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 arv?
Arv är ett objektorienterat koncept som gör det möjligt för nya klasser att utvidga andra klasser. Extends nyckelord används för att implementera begreppet arv i Java-programmeringsspråk. Arv ger i huvudsak återanvändning av kod genom att tillåta utökande egenskaper och beteende hos en befintlig klass med en nyligen definierad klass. När en ny underklass (eller härledd klass) utökar en superklass (eller överordnad klass) kommer den underklassen att ärva alla attribut och metoder för superklassen. Underklassen kan eventuellt åsidosätta beteendet (ge ny eller utökad funktionalitet till metoder) som ärvs från den överordnade klassen. Vanligtvis kan en underklass inte förlänga flera superklasser (t.ex. i Java). Därför kan du inte använda extends för flera arv. För att få flera arv måste du använda gränssnitt.
Vad är skillnaden mellan abstrakt klass och arv?
Abstrakta klasser representerar vanligtvis ett abstrakt begrepp eller en enhet med delvis eller ingen implementering. Arv tillåter nya klasser att utvidga andra klasser. Eftersom abstrakta klasser inte kan initieras måste du använda begreppet arv för att använda abstraktklasser. Annars har en abstraktklass ingen nytta. Abstrakta klasser kan innehålla abstrakta metoder och när klassen förlängs ärvs alla metoder (abstrakt och konkret). Den ärvda klassen kan implementera någon eller alla metoder. Om alla abstraktmetoder inte implementeras, blir den klassen också en abstraktklass. En klass kan inte ärva från mer än en abstraktklass (detta är inte en kvalitet av abstraktklasser i sig utan snarare en begränsning av arv).