Gränssnittsarv är en mekanism i vissa datorspråk där specifika funktioner ärvas av en klass, och då måste den specifika klassen tillhandahålla implementeringar för dessa funktioner för att vara kompletta. Gränssnitt finns bara i vissa objektorienterade programmeringsspråk. De kan användas för att emulera multipelt arv samtidigt som de faktiskt inte tillåter en klass att multiplicera arv, eftersom det i allmänhet inte finns några gränser för antalet gränssnitt en klass kan ärva från. Utöver oimplementerade metoder kan gränssnitt även innehålla publika konstanter.
I gränssnittsarv anses objektet som ärver metodstubbar och konstanter vara en typ av gränssnittsobjekt. Så om en klass X ärvt från ett gränssnitt Y, skulle vilken som helst instans av klassen X också vara en instans av klassen Y. Detta blir mer komplicerat när en klasss gränssnittsarv involverar mer än ett separat gränssnitt. För varje ytterligare gränssnitt som ärvs kan den resulterande klassen legitimt användas som en instans av var och en. Om en klass ärvt från tio olika gränssnitt, kan objekt av den klassen användas som en instans av elva olika objekt, inklusive sig själv.
Ett sådant komplext arv är inte ofta nödvändigt. Gränssnittsarv används för att säkerställa att en klass har en specifik uppsättning av nödvändiga beteenden, och dessa beteenden gör att den kan utföra en mängd olika funktioner som den annars inte skulle kunna göra. Ett vanligt exempel på detta är ActionListener-gränssnittet i Java, som kräver en klass för att endast implementera en specifik metod. Framgångsrik implementering av denna metod tillåter en användare att styra knappar, menyalternativ eller något annat fönsterobjekt i klassen om så önskas. Gränssnittsarv är ett relativt enkelt sätt att lägga till komplex funktionalitet till en klass utan att oroa dig för de mest komplicerade arvsproblemen.
En av de största fördelarna med att använda gränssnittsarv är att det tillåter att specifika objekt används i generisk mening. Eftersom en klass som implementerar ett gränssnitt är en instans av det gränssnittet, kan den användas var som helst där en instans av det gränssnittet krävs. Till exempel, om klass A implementerar klass C och klass B också implementerar klass C, om en metod tar en instans av klass C som parameter som parameter, skulle antingen en instans av klass A eller en instans av klass B vara en acceptabel parameter att använda . Gränssnitt kan inte instansieras på egen hand eftersom de inte är kompletta, så det skulle aldrig finnas ett objekt som enbart var en instans av klass C som parameter.