Abstrakt klasse vs interface
Abstrakt klasse og interface er to objektorienterede konstruktioner findes i mange objektorienterede programmeringssprog som Java. Abstrakt klasse kan betragtes som en abstrakt version af en almindelig (konkret) klasse, mens en grænseflade kan betragtes som et middel til at implementere en kontrakt. Abstrakt klasse er en klasse, der ikke kan initialiseres, men kan udvides. Interface er en type, der skal implementeres af andre klasser. I Java deklareres abstrakte klasser ved hjælp af abstrakt nøgleord, mens interfacenøgleordet bruges til at definere en interface.
Hvad er en 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 en grænseflade?
En grænseflade er en abstrakt type, der bruges til at specificere en kontrakt, der skal implementeres af klasser, der implementerer denne grænseflade. Interface nøgleordet bruges til at definere en grænseflade, og Implements nøgleord bruges til at implementere en grænseflade af en klasse (på Java-programmeringssprog). Normalt vil en grænseflade kun indeholde metodesignaturer og konstante deklarationer. Enhver grænseflade, der implementerer en bestemt grænseflade, skal implementere alle metoder, der er defineret i grænsefladen, eller skal erklæres som en abstrakt klasse. I Java kan typen af en objektreference defineres som en grænsefladetype. Men dette objekt skal enten være null eller skal indeholde et objekt i en klasse, der implementerer den pågældende grænseflade. Ved hjælp af nøgleordet Implements i Java kan du implementere flere grænseflader til en enkelt klasse.
Hvad er forskellen mellem abstrakt klasse og interface?
Abstrakte klasser repræsenterer normalt et abstrakt koncept eller en enhed med delvis eller ingen implementering. På den anden side er en grænseflade en abstrakt type, der bruges til at specificere en kontrakt, der skal implementeres af klasser. Abstrakte klasser skal nedarves (eller udvides), mens grænseflader skal implementeres. Abstrakte klasser kan indeholde abstrakte metoder, mens et interface kun skal indeholde abstrakte metoder. Abstrakte klasser kan indeholde alle variabler, men grænseflader kan kun definere konstanter. En klasse kan ikke arve fra mere end en abstrakt klasse, men kan implementere flere grænseflader. En grænseflade kan ikke implementere en anden grænseflade. Imidlertid kan en grænseflade udvide en klasse.