Co to jest dziedziczenie interfejsu?
Dziedziczenie interfejsu jest mechanizmem w niektórych językach komputerowych, w którym klasa dziedziczy określone funkcje, a następnie ta konkretna klasa musi zapewniać implementację tych funkcji, aby mogła zostać ukończona. Interfejsy istnieją tylko w niektórych obiektowych językach programowania. Można ich używać do emulacji wielokrotnego dziedziczenia, nie pozwalając jednocześnie klasie na wielokrotne dziedziczenie, ponieważ generalnie nie ma ograniczeń co do liczby interfejsów, z których klasa może dziedziczyć. Oprócz metod niezaimplementowanych interfejsy mogą również zawierać stałe publiczne.
W dziedziczeniu interfejsu obiekt, który dziedziczy kody pośredniczące i stałe metody, jest uważany za typ obiektu interfejsu. Tak więc, jeśli klasa X odziedziczona z interfejsu 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 dziedziczonego interfejsu klasa wynikowa może być legalnie używana jako instancja każdego z nich. Jeśli klasa odziedziczyła po dziesięciu różnych interfejsach, obiekty tej klasy mogłyby być użyte jako instancja jedenastu różnych obiektów, w tym siebie.
Tak złożone dziedzictwo nie jest często konieczne. Dziedziczenie interfejsu służy do zapewnienia, że klasa ma określony zestaw wymaganych zachowań, a te zachowania umożliwiają jej wykonywanie różnych funkcji, których inaczej nie mógłby wykonać. Typowym tego przykładem jest interfejs ActionListener w Javie, który wymaga klasy, aby zaimplementować tylko jedną określoną metodę. Pomyślne wdrożenie tej metody pozwala użytkownikowi kontrolować przyciski, elementy menu lub dowolny inny obiekt okna w klasie, jeśli jest to pożądane. Dziedziczenie interfejsu jest stosunkowo prostym sposobem na dodanie złożonej funkcjonalności do klasy bez martwienia się o najbardziej skomplikowane problemy z dziedziczeniem.
Jedną z największych zalet używania dziedziczenia interfejsu jest to, że pozwala on na używanie określonych obiektów w sensie ogólnym. Ponieważ klasa implementująca interfejs jest instancją tego interfejsu, można go użyć w dowolnym miejscu, w którym wymagana jest instancja tego interfejsu. Na przykład, jeśli klasa A implementuje klasę C, a klasa B również implementuje klasę C, jeśli metoda przyjmuje jako parametr wystąpienie klasy C, wystąpienie klasy A lub wystąpienie klasy B byłoby parametrem dopuszczalnym do użycia . Interfejsy nie mogą być tworzone same, ponieważ nie są kompletne, więc nigdy nie byłoby obiektu, który byłby wyłącznie instancją klasy C jako parametrem.