Abstrakt klasse mot arv
Abstrakt klasse og arv er to viktige objektorienterte konsepter som finnes i mange objektorienterte programmeringsspråk som Java. Abstrakt klasse kan betraktes som en abstrakt versjon av en vanlig (konkret) klasse, mens Arv tillater nye klasser å utvide andre klasser. Abstrakt klasse er en klasse som ikke kan initialiseres, men som kan utvides. Så abstrakte klasser er bare meningsfylt å ha hvis programmeringsspråket støtter arv. I Java blir abstrakte klasser erklært ved hjelp av abstrakt nøkkelord, mens Extends-nøkkelord brukes til å arve fra en (super) klasse.
Hva er abstrakt klasse?
Vanligvis kan abstrakte klasser, også kjent som abstrakte baseklasser (ABC), ikke instantieres (en forekomst av den klassen kan ikke opprettes). Så abstrakte klasser er bare meningsfylte å ha hvis programmeringsspråket støtter arv (evne til å lage underklasser fra å utvide en klasse). Abstrakte klasser representerer vanligvis et abstrakt konsept eller enhet med delvis eller ingen implementering. Derfor fungerer abstrakte klasser som foreldreklasser der barneklasser er avledet, slik at barneklassen vil dele de ufullstendige funksjonene i foreldreklassen, og funksjonalitet kan legges til for å fullføre dem.
Abstrakte klasser kan inneholde abstrakte metoder. Underklasser som utvider en abstrakt klasse kan implementere disse (arvelige) abstrakte metodene. Hvis barneklassen implementerer alle slike abstrakte metoder, er det en konkret klasse. Men hvis det ikke gjør det, blir også barneklassen en abstrakt klasse. Hva alt dette betyr er at når programmereren nominerer en klasse som et sammendrag, sier hun at klassen vil være ufullstendig, og den vil ha elementer som må fullføres av de arvende underklassene. Dette er en fin måte å lage en kontrakt mellom to programmerere, som forenkler oppgaver innen programvareutvikling. Programmereren, som skriver kode for å arve, må følge metodedefinisjonene nøyaktig (men kan selvfølgelig ha sin egen implementering).
Hva er arv?
Arv er et objektorientert konsept, som gjør det mulig for nye klasser å utvide andre klasser. Extends søkeord brukes til å implementere begrepet arv i Java programmeringsspråk. Arv gir i hovedsak gjenbruk av kode ved å tillate utvidelse av egenskaper og oppførsel til en eksisterende klasse med en nylig definert klasse. Når en ny underklasse (eller avledet klasse) utvider en superklasse (eller overordnet klasse), vil den underklassen arve alle attributter og metoder i superklassen. Underklassen kan eventuelt overstyre atferden (gi ny eller utvidet funksjonalitet til metoder) som er arvet fra foreldreklassen. Vanligvis kan en underklasse ikke utvide flere superklasser (f.eks. I Java). Derfor kan du ikke bruke utvidelser for flere arv. For å ha flere arv, må du bruke grensesnitt.
Hva er forskjellen mellom abstrakt klasse og arv?
Abstrakte klasser representerer vanligvis et abstrakt konsept eller en enhet med delvis eller ingen implementering. Arv tillater nye klasser å utvide andre klasser. Fordi abstrakte klasser ikke kan instantieres, må du bruke begrepet arv for å gjøre bruk av abstrakte klasser. Ellers har en abstrakt klasse ingen nytte. Abstrakte klasser kan inneholde abstrakte metoder, og når klassen utvides, arves alle metodene (abstrakt og konkret). Den arvede klassen kan implementere noen eller alle metodene. Hvis ikke alle abstrakte metodene blir implementert, blir den klassen også en abstrakt klasse. En klasse kan ikke arve fra mer enn en abstrakt klasse (dette er ikke en kvalitet av abstrakte klasser per se, men snarere en begrensning av arv).