Abstrakt klasse vs arv
Abstrakt klasse og arv er to vigtige objektorienterede koncepter, der findes i mange objektorienterede programmeringssprog som Java. Abstrakt klasse kan betragtes som en abstrakt version af en almindelig (konkret) klasse, mens Arv giver nye klasser mulighed for at udvide andre klasser. Abstrakt klasse er en klasse, der ikke kan initialiseres, men kan udvides. Så abstrakte klasser er kun meningsfulde at have, hvis programmeringssproget understøtter arv. I Java deklareres abstrakte klasser ved hjælp af abstrakt søgeord, mens extends-søgeord bruges til at arve fra en (super) klasse.
Hvad er abstrakt klasse?
Typisk kan abstrakte klasser, også kendt som abstrakte baseklasser (ABC), ikke instantieres (et eksempel på denne klasse kan ikke oprettes). Så abstrakte klasser er kun meningsfulde at have, hvis programmeringssprog understøtter arv (evne til at oprette underklasser fra at udvide en klasse). Abstrakte klasser repræsenterer normalt et abstrakt koncept eller enhed med delvis eller ingen implementering. Derfor fungerer abstrakte klasser som forældreklasser, hvorfra barneklasser er afledt, så børneklassen vil dele de ufuldstændige funktioner i forældreklassen, og funktionalitet kan tilføjes for at afslutte dem.
Abstrakte klasser kan indeholde abstrakte metoder. Underklasser, der udvider en abstrakt klasse, kan implementere disse (arvelige) abstrakte metoder. Hvis barneklassen implementerer alle sådanne abstrakte metoder, er det en konkret klasse. Men hvis det ikke gør det, bliver barneklassen også en abstrakt klasse. Hvad alt dette betyder, er, at når programmøren nominerer en klasse som et abstrakt, siger hun, at klassen vil være ufuldstændig, og den vil have elementer, der skal udfyldes af de arvelige underklasser. Dette er en dejlig måde at oprette en kontrakt på mellem to programmerere, der forenkler opgaver inden for softwareudvikling. Programmereren, der skriver kode for at arve, skal følge metodedefinitionerne nøjagtigt (men kan selvfølgelig have sin egen implementering).
Hvad er arv?
Arv er et objektorienteret koncept, der giver nye klasser mulighed for at udvide andre klasser. Udvider nøgleord bruges til at implementere konceptet om arv i Java-programmeringssprog. Arv giver i det væsentlige kodegenbrug ved at tillade at udvide egenskaber og opførsel af en eksisterende klasse med en nyligt defineret klasse. Når en ny underklasse (eller afledt klasse) udvider en superklasse (eller forældreklasse), vil denne underklasse arve alle attributter og metoder i superklassen. Underklassen kan eventuelt tilsidesætte opførslen (give ny eller udvidet funktionalitet til metoder), der er arvet fra overordnet klasse. Typisk kan en underklasse ikke udvide flere superklasser (f.eks. I Java). Derfor kan du ikke bruge udvidelser til flere arver. For at have flere arver skal du bruge grænseflader.
Hvad er forskellen mellem abstrakt klasse og arv?
Abstrakte klasser repræsenterer normalt et abstrakt koncept eller en enhed med delvis eller ingen implementering. Arv giver nye klasser mulighed for at udvide andre klasser. Fordi abstrakte klasser ikke kan instantieres, er du nødt til at bruge konceptet om arv for at gøre brug af abstrakte klasser. Ellers har en abstrakt klasse ingen brug. Abstrakte klasser kan indeholde abstrakte metoder, og når klassen udvides, arves alle metoder (abstrakt og konkret). Den arvede klasse kan implementere en hvilken som helst eller alle metoder. Hvis alle abstrakte metoder ikke implementeres, bliver denne klasse også en abstrakt klasse. En klasse kan ikke arve fra mere end en abstrakt klasse (dette er ikke en kvalitet af abstrakte klasser i sig selv, men snarere en begrænsning af arv).