Interfejs a klasa abstrakcyjna w Javie: jaka jest różnica?

Spisie treści:

Anonim

Co to jest interfejs?

Interfejs jest planem, którego można użyć do zaimplementowania klasy. Interfejs nie zawiera żadnych konkretnych metod (metod, które mają kod). Wszystkie metody interfejsu są metodami abstrakcyjnymi.

Nie można utworzyć wystąpienia interfejsu. Można jednak utworzyć wystąpienia klas, które implementują interfejsy. Interfejsy nigdy nie zawierają zmiennych instancji, ale mogą zawierać publiczne statyczne zmienne końcowe (tj. Zmienne klasy stałej)

Co to jest klasa abstrakcyjna?

Klasa, która ma słowo kluczowe abstract w swojej deklaracji, nazywana jest klasą abstrakcyjną. Klasy abstrakcyjne powinny mieć co najmniej jedną metodę abstrakcyjną. czyli metody bez treści. Może mieć wiele konkretnych metod.

Klasy abstrakcyjne pozwalają tworzyć plany dla konkretnych klas. Jednak klasa dziedzicząca powinna implementować metodę abstrakcyjną.

Nie można utworzyć instancji klas abstrakcyjnych.

Ważne powody używania interfejsów

  • Interfejsy służą do uzyskania abstrakcji.
  • Zaprojektowany do obsługi dynamicznej rozdzielczości metod w czasie wykonywania
  • Pomaga uzyskać luźne sprzężenie.
  • 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 konkretnych klas
  • Pomaga zdefiniować wspólny interfejs dla jego podklas
  • Klasa abstrakcyjna umożliwia ponowne użycie kodu.

Interfejs vs. Klasa abstrakcyjna

Klasa abstrakcyjna umożliwia tworzenie funkcji, które podklasy mogą implementować lub przesłonić, podczas gdy interfejs pozwala tylko na określenie funkcji, ale nie na jej implementację. Klasa może rozszerzać tylko jedną klasę abstrakcyjną, podczas gdy klasa może implementować wiele interfejsów.

Parametry Berło Klasa abstrakcyjna
Prędkość Powolny Szybki
Wiele dziedziczenia Zaimplementuj kilka interfejsów Tylko jedna klasa abstrakcyjna
Struktura Metody abstrakcyjne Metody abstrakcyjne i konkretne
Kiedy użyć Przyszłe rozszerzenie Aby uniknąć niezależności
Dziedziczenie / implementacja Klasa może implementować wiele interfejsów Klasa może dziedziczyć tylko jedną klasę abstrakcyjną
Implementacja domyślna Podczas dodawania nowych rzeczy do interfejsu, koszmarem jest znalezienie wszystkich implementatorów i zaimplementowanie nowo zdefiniowanych rzeczy. W przypadku klasy abstrakcyjnej można skorzystać z domyślnej implementacji.
Modyfikatory dostępu Interfejs nie ma modyfikatorów dostępu. Zakłada się, że wszystko, co zostało zdefiniowane w interfejsie, jest modyfikatorem publicznym. Klasa abstrakcyjna może mieć modyfikator dostępu.
Kiedy użyć Lepiej jest używać interfejsu, gdy różne implementacje współużytkują tylko sygnaturę metody. Polimorficzna hierarchia typów wartości. Powinien być używany, 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ą.
Realizacja Interfejs jest abstrakcyjny, więc nie może dostarczyć żadnego kodu. Klasa abstrakcyjna może dać pełny, domyślny kod, który należy przesłonić.
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 zdolnoś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 destruktory Interfejs nie może deklarować konstruktorów ani destruktorów. Klasa abstrakcyjna może deklarować konstruktory i destruktory.
Limit rozszerzeń Może rozszerzyć dowolną liczbę interfejsów. W danym momencie może rozszerzać tylko jedną klasę lub jedną klasę abstrakcyjną.
Słowo kluczowe abstrakcyjne W abstrakcyjnym słowie kluczowym interface jest opcjonalne w przypadku deklarowania metody jako abstrakcji. W klasie abstrakcyjnej słowo kluczowe abstract jest obowiązkowe do zadeklarowania metody jako abstrakcji.
Typ zajęć Interfejs może mieć tylko publiczne metody abstrakcyjne. Klasa abstrakcyjna ma chronione i publiczne metody abstrakcyjne.

Przykładowy kod interfejsu i klasy abstrakcyjnej w Javie

Poniżej znajduje się przykładowy kod służący do tworzenia interfejsu i klasy abstrakcyjnej w języku Java

Składnia interfejsu

interface name{//methods}

Przykład interfejsu Java:

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 " + (obj.b * obj.b));}}