Abstrakt klass vs 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 initieras men kan utökas. Så, abstrakta klasser är bara meningsfulla att ha om programmeringsspråket stöder arv. I Java är abstrakta klasser deklarerade med abstrakt nyckelord, medan Extends-nyckelord 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 instantieras (en förekomst 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 utöka en klass). Abstrakta klasser representerar vanligtvis ett abstrakt begrepp eller enhet med partiell eller ingen implementering. Därför fungerar abstrakta klasser som föräldrakurser från vilka barnklasser härleds så att barnklassen kommer att dela de ofullständiga funktionerna i förälderklassen och funktionaliteten kan läggas till för att slutföra dem.
Abstrakta klasser kan innehålla abstrakta metoder. Underklasser som omfattar en abstrakt klass kan implementera dessa (ärftliga) abstrakta metoder. Om barnklassen genomför alla sådana abstrakta metoder är det en konkret klass. Men om det inte gör, 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 det kommer att ha element som måste fyllas i av de arvande underklassen. Det här är ett trevligt sätt att skapa ett kontrakt mellan två programmerare, vilket förenklar uppgifterna i mjukvaruutveckling. Programmeraren, som skriver kod för att ärva, måste följa metoddefinitionerna exakt (men självklart kan ha sin egen implementering).
Vad är arv?
Erfarenhet är ett objektorienterat koncept som tillåter nya klasser att utvidga andra klasser. Extends-nyckelord används för att genomföra begreppet arv i Java-programmeringsspråket. Erfarenhet tillhandahåller i grunden kodåteranvändning genom att tillåta förlängning av egenskaper och beteende hos en befintlig klass med en ny definierad klass. När en ny underklass (eller härledd klass) utökar en superklass (eller förälderklass) så kommer denna underklass att arva alla attribut och metoder för superklassen. Underklassen kan eventuellt åsidosätta beteendet (ge ny eller utvidgad funktionalitet till metoder) ärvda från förälderklassen. Typiskt kan en underklass inte sträcka sig utöver flera superklasser (t ex i Java). Därför kan du inte använda sträcker sig 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 partiell eller ingen implementering. Arv tillåter nya klasser att utvidga andra klasser. Eftersom abstrakta klasser inte kan instansieras måste du använda begreppet arv för att utnyttja abstrakta klasser. Annars har en abstrakt klass ingen användning. Abstrakta klasser kan innehålla abstrakta metoder och när klassen utökas, är alla metoder (abstrakta och konkreta) ärvda. Den ärftliga klassen kan genomföra någon eller alla metoder. Om alla abstrakta metoder inte implementeras, blir den klassen också en abstrakt klass. En klass kan inte ärva från mer än en abstrakt klass (detta är inte en kvalitet av abstrakta klasser i sig, utan snarare en begränsning av arv).