Różnica Między Klasą Abstrakcyjną A Dziedziczeniem

Różnica Między Klasą Abstrakcyjną A Dziedziczeniem
Różnica Między Klasą Abstrakcyjną A Dziedziczeniem

Wideo: Różnica Między Klasą Abstrakcyjną A Dziedziczeniem

Wideo: Różnica Między Klasą Abstrakcyjną A Dziedziczeniem
Wideo: Różnice pomiędzy interfejsem a klasą abstrakcyjną w .NET - Standardowe Pytania Rekrutacyjne 2024, Listopad
Anonim

Klasa abstrakcyjna a dziedziczenie

Klasa abstrakcyjna i dziedziczenie to dwie ważne koncepcje zorientowane obiektowo, które można znaleźć w wielu językach programowania obiektowego, takich jak Java. Klasa abstrakcyjna może być traktowana jako abstrakcyjna wersja zwykłej (konkretnej) klasy, podczas gdy dziedziczenie umożliwia nowym klasom rozszerzenie innych klas. 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ą deklarowane za pomocą słowa kluczowego Abstract, podczas gdy słowo kluczowe Extends jest używane do dziedziczenia po (super) klasie.

Co to jest klasa abstrakcyjna?

Zazwyczaj nie można utworzyć instancji klas abstrakcyjnych, zwanych również abstrakcyjnymi klasami bazowymi (ABC) (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 z rozszerzania klasy). Klasy abstrakcyjne zwykle reprezentują abstrakcyjną koncepcję lub jednostkę z częściową implementacją lub bez implementacji. Dlatego klasy abstrakcyjne działają jako klasy nadrzędne, z których pochodzą klasy potomne, dzięki czemu klasa podrzędna będzie mieć wspólne niekompletne cechy klasy nadrzędnej i można dodać funkcje w celu ich uzupełnienia.

Klasy abstrakcyjne mogą zawierać metody abstrakcyjne. Podklasy rozszerzające klasę abstrakcyjną mogą implementować te (dziedziczone) metody abstrakcyjne. Jeśli klasa potomna implementuje wszystkie takie metody abstrakcyjne, jest to klasa konkretna. Ale jeśli tak nie jest, klasa potomna również staje się klasą abstrakcyjną. Wszystko to oznacza, że programista nominując klasę jako abstrakcję, mówi, że będzie ona niekompletna i będzie zawierała elementy, które będą musiały zostać uzupełnione przez dziedziczące podklasy. To fajny sposób na stworzenie kontraktu między dwoma programistami, co upraszcza zadania w tworzeniu 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 jest koncepcją zorientowaną obiektowo, która umożliwia nowym klasom rozszerzenie innych klas. Słowo kluczowe Extends służy do implementacji koncepcji dziedziczenia w języku programowania Java. Dziedziczenie zasadniczo zapewnia ponowne wykorzystanie kodu, umożliwiając rozszerzenie właściwości i zachowania istniejącej klasy o nowo zdefiniowaną klasę. Gdy nowa podklasa (lub klasa pochodna) rozszerza superklasę (lub klasę nadrzędną), ta podklasa odziedziczy wszystkie atrybuty i metody superklasy. Podklasa może opcjonalnie przesłonić zachowanie (zapewnić nową lub rozszerzoną funkcjonalność metodom) odziedziczone z klasy nadrzędnej. Zwykle podklasa nie może rozszerzać wielu superklas (np. W Javie). Dlatego nie można używać rozszerzeń do dziedziczenia wielokrotnego. Aby mieć wielokrotne dziedziczenie, musisz używać interfejsów.

Jaka jest różnica między klasą abstrakcyjną a dziedziczeniem?

Klasy abstrakcyjne zwykle reprezentują abstrakcyjną koncepcję lub jednostkę z częściową implementacją lub bez implementacji. Dziedziczenie umożliwia nowym klasom rozszerzenie innych klas. Ponieważ nie można utworzyć instancji klas abstrakcyjnych, należy skorzystać z koncepcji dziedziczenia, aby skorzystać z klas abstrakcyjnych. W przeciwnym razie klasa abstrakcyjna nie ma zastosowania. Klasy abstrakcyjne mogą zawierać metody abstrakcyjne, a gdy klasa jest rozszerzona, dziedziczone są wszystkie metody (abstrakcyjne i konkretne). Dziedziczona klasa może implementować dowolną lub wszystkie metody. Jeśli nie zaimplementowano wszystkich metod abstrakcyjnych, ta klasa również staje się klasą abstrakcyjną. Klasa nie może dziedziczyć z więcej niż jednej klasy abstrakcyjnej (nie jest to cecha klas abstrakcyjnych per se, ale raczej ograniczenie dziedziczenia).

Zalecane: