Klasa abstrakcyjna a dziedziczenie
Klasa abstrakcyjna i dziedziczenie to dwie ważne koncepcje obiektowe występujące 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 Dziedziczenie pozwala nowym klasom rozszerzać inne klasy. Klasa abstrakcyjna to klasa, której nie można zainicjować, ale można ją rozszerzyć. Tak więc klasy abstrakcyjne mają sens tylko wtedy, gdy język programowania obsługuje dziedziczenie. W Javie klasy Abstract są zadeklarowane za pomocą słowa kluczowego Abstract, natomiast słowo kluczowe Extends jest używane do dziedziczenia po (super) klasie.
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 dziedziczenie?
Dziedziczenie to koncepcja obiektowa, która umożliwia nowym klasom rozszerzanie innych klas. Słowo kluczowe Extends służy do implementacji koncepcji dziedziczenia w języku programowania Java. Dziedziczenie zasadniczo zapewnia ponowne użycie kodu, umożliwiając rozszerzenie właściwości i zachowania istniejącej klasy o nowo zdefiniowaną klasę. Gdy nowa podklasa (lub klasa pochodna) rozszerzy superklasę (lub klasę nadrzędną), podklasa ta odziedziczy wszystkie atrybuty i metody superklasy. Podklasa może opcjonalnie zastąpić zachowanie (zapewniające nowe lub rozszerzone funkcje metodom) odziedziczone z klasy nadrzędnej. Zazwyczaj podklasa nie może rozszerzać wielu superklas (np. W Javie). Dlatego nie można używać rozszerzeń do wielokrotnego dziedziczenia. Aby mieć wielokrotne dziedziczenie, musisz użyć interfejsów.
Jaka jest różnica między klasą abstrakcyjną a dziedziczeniem?
Klasy abstrakcyjne zwykle przedstawiają abstrakcyjne pojęcie lub jednostkę z częściową implementacją lub bez jej implementacji. Dziedziczenie pozwala nowym klasom rozszerzać inne klasy. Ponieważ nie można utworzyć instancji klas abstrakcyjnych, należy użyć koncepcji dziedziczenia, aby skorzystać z klas abstrakcyjnych. W przeciwnym razie klasa abstrakcyjna nie ma zastosowania. Klasy abstrakcyjne mogą zawierać metody abstrakcyjne, a po rozszerzeniu wszystkie metody (abstrakcyjne i konkretne) są dziedziczone. Dziedziczona klasa może implementować dowolną lub wszystkie metody. Jeśli wszystkie metody abstrakcyjne nie zostaną zaimplementowane, klasa ta stanie się również klasą abstrakcyjną. Klasa nie może dziedziczyć po więcej niż jednej klasie abstrakcyjnej (nie jest to właściwość klas abstrakcyjnych jako takich, ale raczej ograniczenie dziedziczenia).