Hva er grensesnittarv?
Grensesnittarv er en mekanisme i visse dataspråk der spesifikke funksjoner arves av en klasse, og da må den aktuelle klassen gi implementeringer for disse funksjonene for å være fullstendige. Grensesnitt finnes bare i visse objektorienterte programmeringsspråk. De kan brukes til å etterligne flere arv mens de faktisk ikke lar en klasse multiplisere arv, fordi det generelt ikke er noen grenser for antall grensesnitt en klasse kan arve fra. I tillegg til uimplementerte metoder, kan grensesnitt også omfatte offentlige konstanter.
I grensesnittarv anses objektet som arver metodestubber og konstanter å være en type grensesnittobjekt. Så hvis en klasse X arvet fra et grensesnitt Y, vil noen forekomst av klasse X også være et eksempel på klasse Y. Dette blir mer komplisert når en klasses grensesnittarv involverer mer enn ett separat grensesnitt. For hvert ekstra grensesnitt som er arvet, kan den resulterende klassen legitimt brukes som en forekomst av hver. Hvis en klasse arvet fra ti forskjellige grensesnitt, kunne objekter av den klassen brukes som et eksempel på elleve forskjellige objekter, inkludert seg selv.
Slik kompleks arv er ikke ofte nødvendig. Grensesnittarv brukes for å sikre at en klasse har et spesifikt sett med ønsket atferd, og denne atferden gjør det mulig for den å utføre en rekke funksjoner som den ellers ikke kunne gjøre. Et vanlig eksempel på dette er ActionListener-grensesnittet i Java, som krever at en klasse kun skal implementere en spesifikk metode. Vellykket implementering av denne metoden lar en bruker kontrollere knapper, menyelementer eller et annet vinduobjekt i klassen om ønskelig. Grensesnittarv er en relativt enkel måte å legge til kompleks funksjonalitet i en klasse uten å bekymre deg for mest kompliserte arvespørsmål.
En av de største fordelene med å bruke grensesnittarv er at det gjør at spesifikke objekter kan brukes i generisk forstand. Siden en klasse som implementerer et grensesnitt er en forekomst av det grensesnittet, kan den brukes hvor som helst sted en instans av det grensesnittet er nødvendig. Hvis for eksempel klasse A implementerer klasse C, og klasse B også implementerer klasse C, hvis en metode tar en forekomst av klasse C som en parameter, vil enten en forekomst av klasse A eller en forekomst av klasse B være en akseptabel parameter å bruke . Grensesnitt kan ikke bli instantisert på egenhånd fordi de ikke er komplette, så det ville aldri være et objekt som bare var et eksempel på klasse C som en parameter.