Abstract Class vs Interface
Abstract klasse og Interface er to objektorienterede konstruktioner, der 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 som kan udvides. Interface er en type, der skal implementeres af andre klasser. I Java erklæres abstrakte klasser ved hjælp af abstrakt nøgleord, mens grænsefladenøgleordet bruges til at definere en grænseflade.
Hvad er en abstrakt klasse?
Typisk kan abstrakte klasser, også kendt som abstrakte basisklasser (ABC), ikke instansieres (en forekomst af den klasse kan ikke oprettes). Så abstrakte klasser er kun meningsfulde at have, hvis programmeringssproget understøtter arv (evnen til at oprette underklasser fra at udvide en klasse). Abstrakte klasser repræsenterer norm alt et abstrakt koncept eller entitet med delvis eller ingen implementering. Derfor fungerer abstrakte klasser som forældreklasser, hvorfra børneklasser er afledt, så børneklassen deler de ufuldstændige funktioner i forældreklassen, og funktionalitet kan tilføjes for at fuldføre dem.
Abstrakte klasser kan indeholde abstrakte metoder. Underklasser, der udvider en abstrakt klasse, kan implementere disse (arvede) abstrakte metoder. Hvis børneklassen implementerer alle sådanne abstrakte metoder, er det en konkret klasse. Men hvis den ikke gør det, bliver børneklassen 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 nedarvede underklasser. Dette er en fin måde at skabe en kontrakt mellem to programmører på, hvilket forenkler opgaver inden for softwareudvikling. Programmøren, som 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, som implementerer denne grænseflade. Interface-nøgleordet bruges til at definere en grænseflade, og Implements-nøgleordet bruges til at implementere en grænseflade af en klasse (i Java-programmeringssprog). Norm alt vil en grænseflade kun indeholde metodesignaturer og konstante erklæringer. Enhver grænseflade, der implementerer en bestemt grænseflade, bør implementere alle metoder, der er defineret i grænsefladen, eller bør erklæres som en abstrakt klasse. I Java kan typen af en objektreference defineres som en grænsefladetype. Men det objekt skal enten være null eller skal indeholde et objekt af en klasse, som implementerer den pågældende grænseflade. Ved at bruge Implements nøgleord i Java kan du implementere flere grænseflader til en enkelt klasse.
Hvad er forskellen mellem abstrakt klasse og grænseflade?
Abstrakte klasser repræsenterer norm alt 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 bør nedarves (eller udvides), mens grænseflader bør implementeres. Abstrakte klasser kan indeholde abstrakte metoder, hvorimod en grænseflade kun bør indeholde abstrakte metoder. Abstrakte klasser kan indeholde alle variabler, men grænseflader kan kun definere konstanter. En klasse kan ikke arve fra mere end én abstrakt klasse, men kan implementere flere grænseflader. En grænseflade kan ikke implementere en anden grænseflade. En grænseflade kan dog udvide en klasse.