Klasa abstrakcyjna a interfejs
Klasa abstrakcyjna i interfejs to dwie konstrukcje obiektowe znalezione w wielu obiektowych językach programowania, takich jak Java. Klasa abstrakcyjna może być uważana za abstrakcyjną wersję zwykłej (konkretnej) klasy, podczas gdy interfejs może być uważany za środek realizacji kontraktu. Klasa abstrakcyjna to klasa, której nie można zainicjować, ale można ją rozszerzyć. Interfejs to typ, który musi zostać zaimplementowany przez inne klasy. W Javie klasy Abstract są deklarowane za pomocą słowa kluczowego Abstract, natomiast słowo kluczowe interface służy do definiowania interfejsu.
Co to jest klasa abstrakcyjna?
Zazwyczaj klasy abstrakcyjne, znane również jako abstrakcyjne klasy podstawowe (ABC), nie mogą być tworzone (nie można utworzyć instancji tej klasy). Tak więc klasy abstrakcyjne mają sens tylko wtedy, gdy język programowania obsługuje dziedziczenie (możliwość tworzenia podklas po rozszerzeniu klasy). Klasy abstrakcyjne zwykle reprezentują abstrakcyjne pojęcie lub encję z częściową implementacją lub bez jej implementacji. Dlatego klasy abstrakcyjne działają jako klasy nadrzędne, z których wywodzą się klasy podrzędne, dzięki czemu klasa podrzędna będzie dzielić niekompletne funkcje klasy nadrzędnej i można ją dodać, aby je uzupełnić.
Klasy abstrakcyjne mogą zawierać metody abstrakcyjne. Podklasy rozszerzające klasę abstrakcyjną mogą implementować te (odziedziczone) metody abstrakcyjne. Jeśli klasa potomna implementuje wszystkie takie metody abstrakcyjne, jest to klasa konkretna. Ale jeśli nie, klasa potomna staje się również klasą abstrakcyjną. Oznacza to, że gdy programista nominuje klasę jako streszczenie, mówi, że klasa będzie niekompletna i będzie zawierała elementy, które muszą zostać uzupełnione przez dziedziczące podklasy. To dobry sposób na zawarcie umowy między dwoma programistami, która upraszcza zadania związane z tworzeniem oprogramowania. Programista, który pisze kod do dziedziczenia, musi dokładnie przestrzegać definicji metod (ale oczywiście może mieć własną implementację).
Co to jest interfejs?
Interfejs to typ abstrakcyjny, który służy do określenia kontraktu, który powinien zostać zaimplementowany przez klasy implementujące ten interfejs. Słowo kluczowe interfejs służy do definiowania interfejsu, a słowo kluczowe Implements służy do implementacji interfejsu przez klasę (w języku programowania Java). Zwykle interfejs będzie zawierał tylko sygnatury metod i stałe deklaracje. Każdy interfejs, który implementuje określony interfejs, powinien implementować wszystkie metody zdefiniowane w interfejsie lub powinien zostać zadeklarowany jako klasa abstrakcyjna. W Javie typ odwołania do obiektu można zdefiniować jako typ interfejsu. Ale ten obiekt musi być zerowy lub powinien zawierać obiekt klasy, który implementuje ten konkretny interfejs. Za pomocą słowa kluczowego Implements w Javie można zaimplementować wiele interfejsów w jednej klasie.
Jaka jest różnica między klasą abstrakcyjną a interfejsem?
Klasy abstrakcyjne zwykle przedstawiają abstrakcyjne pojęcie lub jednostkę z częściową implementacją lub bez jej implementacji. Z drugiej strony interfejs to typ abstrakcyjny, który służy do określania kontraktu, który powinien zostać zaimplementowany przez klasy. Klasy abstrakcyjne powinny być dziedziczone (lub rozszerzane), a interfejsy powinny być implementowane. Klasy abstrakcyjne mogą zawierać metody abstrakcyjne, podczas gdy interfejs powinien zawierać tylko metody abstrakcyjne. Klasy abstrakcyjne mogą zawierać dowolne zmienne, ale interfejsy mogą definiować tylko stałe. Klasa nie może dziedziczyć po więcej niż jednej klasie abstrakcyjnej, ale może implementować wiele interfejsów. Interfejs nie może zaimplementować innego interfejsu. Interfejs może jednak rozszerzyć klasę.