Różnica między klasą abstrakcyjną a interfejsem

Różnica między klasą abstrakcyjną a interfejsem
Różnica między klasą abstrakcyjną a interfejsem

Wideo: Różnica między klasą abstrakcyjną a interfejsem

Wideo: Różnica między klasą abstrakcyjną a interfejsem
Wideo: Wstęp do astrobiologii: co mają wspólnego kanibale, kosmos i początki życia na Ziemii? /dr Zajkowski 2024, Listopad
Anonim

Klasa abstrakcyjna a interfejs

Klasa abstrakcyjna i interfejs to dwie konstrukcje zorientowane obiektowo, które można znaleźć w wielu obiektowych językach programowania, takich jak Java. Klasę abstrakcyjną można uznać za abstrakcyjną wersję zwykłej (konkretnej) klasy, natomiast interfejs można uznać za sposób realizacji kontraktu. Klasa abstrakcyjna to klasa, której nie można zainicjować, ale można ją rozszerzyć. Interface to typ, który musi być zaimplementowany przez inne klasy. W Javie klasy abstrakcyjne 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 bazowe (ABC), nie mogą być tworzone (nie można utworzyć wystąpienia tej klasy). Tak więc klasy abstrakcyjne mają sens tylko wtedy, gdy język programowania obsługuje dziedziczenie (możliwość tworzenia podklas z rozszerzenia 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 potomna będzie współdzielić niekompletne cechy klasy nadrzędnej, a funkcjonalność może zostać dodana w celu ich ukończenia.

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 staje się również klasą abstrakcyjną. Oznacza to, że kiedy programista wyznacza klasę jako Abstrakt, mówi, że klasa będzie niekompletna i będzie zawierała elementy, które muszą zostać uzupełnione przez dziedziczące podklasy. To fajny sposób na stworzenie kontraktu między dwoma programistami, który 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 interfejs?

Interfejs jest typem abstrakcyjnym używanym do określenia kontraktu, który powinien być zaimplementowany przez klasy implementujące ten interfejs. Słowo kluczowe interface służy do definiowania interfejsu, a słowo kluczowe Implements służy do implementacji interfejsu przez klasę (w języku programowania Java). Zazwyczaj interfejs zawiera tylko sygnatury metod i deklaracje stałych. Każdy interfejs, który implementuje określony interfejs, powinien implementować wszystkie metody zdefiniowane w interfejsie lub powinien być zadeklarowany jako klasa abstrakcyjna. W Javie typ odwołania do obiektu można zdefiniować jako typ interfejsu. Ale ten obiekt musi być null lub powinien zawierać obiekt klasy, która implementuje ten konkretny interfejs. Używając słowa kluczowego Implements w Javie, możesz zaimplementować wiele interfejsów do jednej klasy.

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

Klasy abstrakcyjne zwykle reprezentują abstrakcyjne pojęcie lub jednostkę z częściową implementacją lub bez implementacji. Z drugiej strony interfejs jest typem abstrakcyjnym używanym do określenia kontraktu, który powinien być zaimplementowany przez klasy. Klasy abstrakcyjne powinny być dziedziczone (lub rozszerzone), a interfejsy powinny być zaimplementowane. 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ć z więcej niż jednej klasy abstrakcyjnej, ale może implementować wiele interfejsów. Interfejs nie może implementować innego interfejsu. Jednak interfejs może rozszerzyć klasę.

Zalecana: