Różnica między klasą abstrakcyjną a interfejsem w Java
Kluczowa różnica między klasą abstrakcyjną a interfejsem w Java
- W interfejsie klasa może implementować wiele interfejsów, podczas gdy klasa może dziedziczyć tylko jedną klasę abstrakcyjną.
- W interfejsie nie ma modyfikatorów dostępu. Zakłada się, że wszystko zdefiniowane wewnątrz interfejsu ma modyfikator publiczny, podczas gdy klasa abstrakcyjna może mieć modyfikator dostępu.
- Interfejs nie może zawierać pól danych, podczas gdy klasa abstrakcyjna może zawierać pola danych.
- Interfejsy pomagają zdefiniować peryferyjne możliwości klasy, podczas gdy klasa abstrakcyjna definiuje tożsamość klasy.
Czym jest klasa abstrakcyjna?
Klasa, która ma słowo kluczowe abstract w swojej deklaracji, nazywana jest klasą abstrakcyjną. Klasy abstrakcyjne powinny mieć zero lub więcej metod abstrakcyjnych. tj. metod bez treści. Mogą mieć wiele metod konkretnych. Klasy abstrakcyjne pozwalają tworzyć plany dla klas konkretnych. Jednak klasa dziedzicząca powinna implementować metodę abstrakcyjną. Klasy abstrakcyjne nie mogą być tworzone.
Ważne powody korzystania z interfejsów
- Interfejsy służą do osiągnięcia abstrakcja.
- Zaprojektowany, aby wspierać dynamiczne rozpoznawanie metod w czasie wykonywania
- Pomaga uzyskać luźne połączenie.
- Umożliwia oddzielenie definicji metody od hierarchii dziedziczenia
Ważne powody używania klasy abstrakcyjnej
- Klasy abstrakcyjne oferują domyślną funkcjonalność dla podklas.
- Udostępnia szablon dla przyszłych określonych klas
- Pomaga zdefiniować wspólny interfejs dla jego podklas
- Klasa abstrakcyjna umożliwia ponowne użycie kodu.
Co to jest interfejs?
Interfejs jest projektem, który można wykorzystać do zaimplementowania klasy. Interfejs nie zawiera żadnych konkretnych metod (metod, które mają kod). Wszystkie metody interfejsu są metodami abstrakcyjnymi. Interfejs nie może zostać utworzony. Jednak klasy, które implementują interfejsy, mogą zostać utworzone. Interfejsy nigdy nie zawierają zmiennych instancji, ale mogą zawierać publiczne zmienne statyczne finalne (tj. stałe zmienne klasowe).
Różnica między interfejsem a klasą abstrakcyjną w Java
Klasa abstrakcyjna pozwala na tworzenie funkcjonalności, które podklasy mogą implementować lub zastępować, podczas gdy interfejs pozwala jedynie na określenie funkcjonalności, ale nie na jej implementację. Klasa może rozszerzać tylko jedną klasę abstrakcyjną, podczas gdy klasa może implementować wiele interfejsów.
parametry | Interfejs | Klasa abstrakcyjna |
---|---|---|
Prędkość | Zwolnij | pompatyczność |
Wiele spadków | Zaimplementuj kilka interfejsów | Tylko jedna klasa abstrakcyjna |
Structure | Metody abstrakcyjne | Metody abstrakcyjne i konkretne |
Kiedy używać | Przyszłe rozszerzenie | Aby uniknąć niepodległości |
Dziedziczenie/implementacja | Klasa może implementować wiele interfejsów | Klasa może dziedziczyć tylko jedną klasę abstrakcyjną |
Domyślna implementacja | Podczas dodawania nowych rzeczy do interfejsu znalezienie wszystkich implementatorów i zaimplementowanie nowo zdefiniowanych rzeczy jest koszmarem. | W przypadku klasy abstrakcyjnej możesz skorzystać z domyślnej implementacji. |
Modyfikatory dostępu | Interfejs nie posiada modyfikatorów dostępu. Zakłada się, że wszystko zdefiniowane wewnątrz interfejsu jest modyfikatorem publicznym. | Klasa abstrakcyjna może mieć modyfikator dostępu. |
Kiedy używać | Lepiej jest używać interfejsu, gdy różne implementacje współdzielą tylko sygnaturę metody. Polimorficzna hierarchia typów wartości. | Należy go stosować, gdy różne implementacje tego samego rodzaju mają wspólne zachowanie. |
Pola danych | interfejs nie może zawierać pól danych. | klasa może mieć pola danych. |
Domyślne dziedziczenie wielokrotne | Klasa może implementować wiele interfejsów. | Klasa dziedziczy tylko jedną klasę abstrakcyjną. |
Wdrożenie | Interfejs jest abstrakcyjny, więc nie może dostarczyć żadnego kodu. | Klasa abstrakcyjna może dać pełny, domyślny kod, który powinien zostać zastąpiony. |
Stosowanie modyfikatorów dostępu | Nie można używać modyfikatorów dostępu dla metody, właściwości itp. | Możesz użyć klasy abstrakcyjnej, która zawiera modyfikatory dostępu. |
Stosowanie | Interfejsy pomagają zdefiniować peryferyjne możliwości klasy. | Klasa abstrakcyjna definiuje tożsamość klasy. |
Zdefiniowane pola | Nie można zdefiniować żadnych pól | Klasa abstrakcyjna umożliwia definiowanie zarówno pól, jak i stałych |
Dziedzictwo | Interfejs może dziedziczyć wiele interfejsów, ale nie może dziedziczyć klasy. | Klasa abstrakcyjna może dziedziczyć klasę i wiele interfejsów. |
Konstruktor lub destruktor | Interfejs nie może deklarować konstruktorów ani destruktorów. | Klasa abstrakcyjna może deklarować konstruktory i destruktory. |
Limit rozszerzeń | Może rozszerzać dowolną liczbę interfejsów. | Może rozszerzać tylko jedną klasę lub jedną klasę abstrakcyjną na raz. |
Abstrakcyjne słowo kluczowe | W abstrakcyjnym słowie kluczowym interfejsu jest opcjonalne do deklarowania metody jako abstrakcyjnej. | W klasie abstrakcyjnej słowo kluczowe streszczenie jest obowiązkowe do zadeklarowania metody jako abstrakcyjnej. |
Typ klasy | Interfejs może mieć tylko publiczne metody abstrakcyjne. | Klasa abstrakcyjna ma chronione i publiczne metody abstrakcyjne. |
Przykładowy kod dla interfejsu i klasy abstrakcyjnej w Java
Poniżej znajduje się przykładowy kod umożliwiający utworzenie interfejsu i klasy abstrakcyjnej w Java
Składnia interfejsu
interface name{ //methods }
Java Przykład interfejsu:
interface Pet { public void test(); } class Dog implements Pet { public void test() { System.out.println("Interface Method Implemented"); } public static void main(String args[]) { Pet p = new Dog(); p.test(); } }
Składnia klasy abstrakcyjnej
abstract class name{ // code }
Przykład klasy abstrakcyjnej:
abstract class Shape { int b = 20; abstract public void calculateArea(); } public class Rectangle extends Shape { public static void main(String args[]) { Rectangle obj = new Rectangle(); obj.b = 200; obj.calculateArea(); } public void calculateArea() { System.out.println("Area is " + (b * b)); } }