Što je nasljeđivanje sučelja?

Nasljeđivanje sučelja je mehanizam u određenim računalnim jezicima gdje određene funkcije nasljeđuje klasa, a zatim ta određena klasa mora osigurati implementacije za te funkcije kako bi bila potpuna. Sučelja postoje samo u određenim objektno orijentiranim programskim jezicima. Mogu se koristiti za emulaciju višestrukog nasljeđivanja dok zapravo ne dopuštaju da se klasa nasljeđuje umnoženo, jer općenito ne postoje ograničenja za broj sučelja od kojih klasa može naslijediti. Osim neimplementiranih metoda, sučelja mogu uključivati ​​i javne konstante.

U nasljeđivanju sučelja, objekt koji nasljeđuje stubove i konstante metode smatra se vrstom objekta sučelja. Dakle, ako je klasa X naslijeđena od sučelja Y, bilo koja instanca klase X bi također bila instanca klase Y. Ovo postaje kompliciranije kada nasljeđivanje sučelja klase uključuje više od jednog zasebnog sučelja. Za svako dodatno sučelje koje je naslijeđeno, rezultirajuća klasa može se legitimno koristiti kao instanca svakog od njih. Ako je klasa naslijeđena od deset različitih sučelja, objekti te klase mogli bi se koristiti kao instanca jedanaest različitih objekata, uključujući i samu sebe.

Takvo složeno nasljeđivanje nije često potrebno. Nasljeđivanje sučelja koristi se kako bi se osiguralo da klasa ima specifičan skup potrebnih ponašanja, a ta ponašanja joj omogućuju izvođenje različitih funkcija koje inače ne bi mogla učiniti. Uobičajeni primjer ovoga je sučelje ActionListener u Javi, koje zahtijeva da klasa implementira samo jednu specifičnu metodu. Uspješna implementacija ove metode omogućuje korisniku da kontrolira gumbe, stavke izbornika ili bilo koji drugi objekt prozora u klasi ako želi. Nasljeđivanje sučelja je relativno jednostavan način dodavanja složene funkcionalnosti klasi bez brige o najkompliciranijim problemima nasljeđivanja.

Jedna od najvećih prednosti korištenja nasljeđivanja sučelja je ta što omogućuje korištenje specifičnih objekata u generičkom smislu. Budući da je klasa koja implementira sučelje instanca tog sučelja, može se koristiti bilo gdje gdje je potrebna instanca tog sučelja. Na primjer, ako klasa A implementira klasu C, a klasa B također implementira klasu C, ako metoda uzima kao parametar instancu klase C, bilo bi primjerak klase A ili instanca klase B prihvatljiv parametar za korištenje . Sučelja se ne mogu instancirati sama po sebi jer nisu potpuna, tako da nikada ne bi postojao objekt koji je bio samo instanca klase C kao parametar.