L’ereditarietà dell’interfaccia è un meccanismo in alcuni linguaggi di computer in cui funzioni specifiche vengono ereditate da una classe e quindi quella particolare classe deve fornire implementazioni per tali funzioni per essere completa. Le interfacce esistono solo in alcuni linguaggi di programmazione orientati agli oggetti. Possono essere usati per emulare l’ereditarietà multipla pur non consentendo effettivamente a una classe di moltiplicarsi per ereditare, perché generalmente non ci sono limiti al numero di interfacce da cui una classe può ereditare. Oltre ai metodi non implementati, le interfacce possono includere anche costanti pubbliche.
Nell’ereditarietà dell’interfaccia, l’oggetto che eredita gli stub e le costanti del metodo è considerato un tipo di oggetto interfaccia. Quindi, se una classe X ereditata da un’interfaccia Y, qualsiasi istanza della classe X sarebbe anche un’istanza della classe Y. Ciò diventa più complicato quando l’ereditarietà dell’interfaccia di una classe coinvolge più di un’interfaccia separata. Per ogni interfaccia aggiuntiva ereditata, la classe risultante può essere legittimamente utilizzata come istanza di ciascuna. Se una classe ereditata da dieci diverse interfacce, gli oggetti di quella classe potrebbero essere usati come un’istanza di undici oggetti diversi, incluso se stesso.
Un’eredità così complessa non è spesso necessaria. L’ereditarietà dell’interfaccia viene utilizzata per garantire che una classe disponga di un insieme specifico di comportamenti richiesti e questi comportamenti le consentano di eseguire una varietà di funzioni che altrimenti non potrebbe svolgere. Un esempio comune di ciò è l’interfaccia ActionListener in Java, che richiede una classe per implementare solo un metodo specifico. La corretta implementazione di questo metodo consente a un utente di controllare pulsanti, voci di menu o qualsiasi altro oggetto finestra nella classe, se lo si desidera. L’ereditarietà dell’interfaccia è un modo relativamente semplice per aggiungere funzionalità complesse a una classe senza preoccuparsi dei problemi di ereditarietà più complicati.
Uno dei maggiori vantaggi dell’utilizzo dell’ereditarietà dell’interfaccia è che consente di utilizzare oggetti specifici in senso generico. Poiché una classe che implementa un’interfaccia è un’istanza di quell’interfaccia, può essere utilizzata ovunque sia richiesta un’istanza di quell’interfaccia. Ad esempio, se la classe A implementa la classe C e la classe B implementa anche la classe C, se un metodo accetta come parametro un’istanza della classe C, un’istanza della classe A o un’istanza della classe B sarebbe un parametro accettabile da usare . Le interfacce non possono essere istanziate da sole perché non sono complete, quindi non ci sarebbe mai un oggetto che fosse puramente un’istanza della classe C come parametro.