Abstrakt klasse mot grensesnitt
Abstrakt klasse og grensesnitt er to objektorienterte konstruksjoner som finnes i mange objektorienterte programmeringsspråk som Java. Abstrakt klasse kan betraktes som en abstrakt versjon av en vanlig (konkret) klasse, mens et grensesnitt kan betraktes som et middel for å gjennomføre en kontrakt. Abstrakt klasse er en klasse som ikke kan initialiseres, men som kan utvides. Grensesnitt er en type som må implementeres av andre klasser. I Java blir abstrakte klasser erklært ved hjelp av abstrakt nøkkelord, mens grensesnittnøkkelordet brukes til å definere et grensesnitt.
Hva er en 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 et grensesnitt?
Et grensesnitt er en abstrakt type som brukes til å spesifisere en kontrakt som skal implementeres av klasser, som implementerer grensesnittet. Grensesnittnøkkelordet brukes til å definere et grensesnitt, og Implements-nøkkelord brukes til å implementere et grensesnitt av en klasse (på Java-programmeringsspråk). Vanligvis vil et grensesnitt bare inneholde metodesignaturer og konstante erklæringer. Ethvert grensesnitt som implementerer et bestemt grensesnitt, skal implementere alle metodene som er definert i grensesnittet, eller deklareres som en abstrakt klasse. I Java kan typen objektreferanse defineres som en grensesnitttype. Men det objektet må enten være null eller skal inneholde et objekt i en klasse, som implementerer det bestemte grensesnittet. Ved å bruke Implements søkeord i Java kan du implementere flere grensesnitt til en enkelt klasse.
Hva er forskjellen mellom abstrakt klasse og grensesnitt?
Abstrakte klasser representerer vanligvis et abstrakt konsept eller en enhet med delvis eller ingen implementering. På den annen side er et grensesnitt en abstrakt type som brukes til å spesifisere en kontrakt som skal implementeres av klasser. Abstrakte klasser bør arves (eller utvides), mens grensesnitt skal implementeres. Abstrakte klasser kan inneholde abstrakte metoder, mens et grensesnitt bare skal inneholde abstrakte metoder. Abstrakte klasser kan inneholde alle variabler, men grensesnitt kan bare definere konstanter. En klasse kan ikke arve fra mer enn en abstrakt klasse, men kan implementere flere grensesnitt. Et grensesnitt kan ikke implementere et annet grensesnitt. Imidlertid kan et grensesnitt utvide en klasse.