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: Różnice pomiędzy interfejsem a klasą abstrakcyjną w .NET - Standardowe Pytania Rekrutacyjne 2024, Kwiecień
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. Klasa abstrakcyjna może być traktowana jako abstrakcyjna wersja zwykłej (konkretnej) klasy, podczas gdy interfejs może być traktowany jako sposób implementacji kontraktu. Klasa abstrakcyjna to klasa, której nie można zainicjować, ale można ją rozszerzyć. Interfejs to typ, który musi być implementowany przez inne klasy. W Javie klasy Abstract są deklarowane za pomocą słowa kluczowego Abstract, podczas gdy słowo kluczowe interface służy do definiowania interfejsu.

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 interfejs?

Interfejs jest typem abstrakcyjnym używanym do określenia kontraktu, który powinien być implementowany przez klasy implementujące ten interfejs. Słowo kluczowe interface jest używane do definiowania interfejsu, a słowo kluczowe Implements jest używane do implementowania interfejsu przez klasę (w języku programowania Java). Zwykle interfejs 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 być zadeklarowany jako klasa abstrakcyjna. W Javie typ odwołania do obiektu można zdefiniować jako typ interfejsu. Ale ten obiekt musi albo mieć wartość null, albo 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 w jednej klasie.

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

Klasy abstrakcyjne zwykle reprezentują abstrakcyjną koncepcję 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ć implementowany 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ć 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ę.

Zalecane: