Co to jest dziedziczenie interfejsu?

Dziedziczenie interfejsów to mechanizm w niektórych językach komputerowych, w którym określone funkcje są dziedziczone przez klasę, a następnie ta konkretna klasa musi zapewnić implementacje tych funkcji, aby były kompletne. Interfejsy istnieją tylko w niektórych językach programowania obiektowego. Mogą być używane do emulowania dziedziczenia wielokrotnego, nie pozwalając klasie na wielokrotne dziedziczenie, ponieważ generalnie nie ma ograniczeń co do liczby interfejsów, z których klasa może dziedziczyć. Oprócz niezaimplementowanych metod interfejsy mogą również zawierać stałe publiczne.

W dziedziczeniu interfejsów obiekt, który dziedziczy kody pośredniczące i stałe metod, jest uważany za typ obiektu interfejsu. Tak więc, jeśli klasa X odziedziczyła po interfejsie Y, każda instancja klasy X byłaby również instancją klasy Y. Staje się to bardziej skomplikowane, gdy dziedziczenie interfejsu klasy obejmuje więcej niż jeden oddzielny interfejs. Dla każdego dodatkowego interfejsu, który jest dziedziczony, wynikowa klasa może być legalnie używana jako instancja każdego z nich. Jeśli klasa dziedziczy z dziesięciu różnych interfejsów, obiekty tej klasy mogą być używane jako instancja jedenastu różnych obiektów, w tym samej siebie.

Często tak złożone dziedziczenie nie jest konieczne. Dziedziczenie interfejsu służy do upewnienia się, że klasa ma określony zestaw wymaganych zachowań, a te zachowania umożliwiają jej wykonywanie różnych funkcji, których inaczej nie mogłaby wykonać. Typowym przykładem jest interfejs ActionListener w Javie, który wymaga, aby klasa implementowała tylko jedną konkretną metodę. Pomyślna implementacja tej metody umożliwia użytkownikowi kontrolowanie przycisków, elementów menu lub dowolnego innego obiektu okna w klasie, jeśli jest to pożądane. Dziedziczenie interfejsów to stosunkowo prosty sposób na dodanie złożonej funkcjonalności do klasy bez martwienia się o najbardziej skomplikowane problemy z dziedziczeniem.

Jedną z największych zalet korzystania z dziedziczenia interfejsów jest to, że pozwala ono na używanie określonych obiektów w sensie ogólnym. Ponieważ klasa implementująca interfejs jest instancją tego interfejsu, może być używana w dowolnym miejscu, w którym instancja tego interfejsu jest wymagana. Na przykład, jeśli klasa A implementuje klasę C, a klasa B implementuje również klasę C, jeśli metoda przyjmuje jako parametr instancję klasy C, to instancja klasy A lub instancja klasy B będzie dopuszczalnym parametrem do użycia . Interfejsy nie mogą być tworzone samodzielnie, ponieważ nie są kompletne, więc nigdy nie będzie obiektu, który byłby wyłącznie instancją klasy C jako parametr.