java interface abstract class tutorial with examples
W tym samouczku wideo wyjaśniono, czym jest interfejs Java, jak go zaimplementować oraz dziedziczenie wielokrotne przy użyciu interfejsów w języku Java wraz z przykładami:
W jednym z naszych wcześniejszych samouczków szczegółowo omówiliśmy abstrakcję. Tam omówiliśmy klasy abstrakcyjne i metody abstrakcyjne. Wiemy, że klasy abstrakcyjne zapewniają abstrakcję, ponieważ możemy również mieć pewną metodę nieabstrakcyjną w klasie abstrakcyjnej.
Funkcja zapewniająca 100% abstrakcji w Javie nosi nazwę „ Berło ”. W tym samouczku omówimy interfejsy w Javie.
=> Zapoznaj się z podręcznikiem Java dla początkujących tutaj.
Czego się nauczysz:
- Samouczki wideo dotyczące interfejsów i klas abstrakcyjnych
- Co to jest interfejs w Javie
- Wiele interfejsów w Javie
- Wniosek
Samouczki wideo dotyczące interfejsów i klas abstrakcyjnych
Wprowadzenie do interfejsów i klas abstrakcyjnych w Javie - Część 1:
Przegląd interfejsów i klas abstrakcyjnych w Javie - część 2:
Abstrakcja i dziedziczenie w Javie:
Co to jest interfejs w Javie
Interfejs w Javie jest definiowany jako typ abstrakcyjny, który określa zachowanie klasy. Interfejs to rodzaj protokołu, który określa zasady dotyczące zachowania określonej klasy.
Interfejs w Javie może zawierać metody abstrakcyjne i stałe statyczne. Domyślnie wszystkie metody w interfejsie są publiczne i abstrakcyjne.
Poniżej podano prosty przykład interfejsu w Javie.
interface shape{ public static final String color = “Red”; public void calculateArea(); }
Powyższy przykład definiuje „kształt” interfejsu, który zawiera zmienną statyczną i abstrakcyjną metodę „obliczArea ()”.
Interfejs to jednostka, która ma tylko abstrakcyjne metody jako ciało. Może również zawierać statyczne zmienne końcowe.
Tak więc, podobnie jak klasa, interfejs może również zawierać metody i zmienne, ale należy pamiętać, że metody są abstrakcyjne (bez implementacji), a zmienne są statyczne.
Poniżej wymieniono niektóre właściwości, o których należy pamiętać w związku z interfejsami:
- Interfejsy są planami dla klasy. Mówią klasie, co mają robić za pomocą swoich metod.
- Interfejs określa abstrakcyjne metody i klasy implementujące ten interfejs powinny również implementować te metody.
- Jeśli klasa implementująca interfejs nie definiuje wszystkich metod interfejsu, wówczas ta klasa staje się klasą abstrakcyjną.
Ogólna składnia deklaracji interfejsu jest podana poniżej.
interface { //constant or static fields declaration //abstract method declaration //default declarations }
Jak pokazano w powyższej deklaracji, używamy słowa kluczowego Java „interface”, które oznacza, że teraz deklarujemy interfejs.
pytania i odpowiedzi na rozmowę z leadem testowym pdf
Po słowie kluczowym „interfejs” następuje nazwa_interfejsu, a następnie otwierający nawias klamrowy. Następnie mamy różne deklaracje metod abstrakcyjnych, deklaracje pól statycznych itp. Na koniec zamykamy nawiasy klamrowe.
Na przykład,jeśli chcemy zadeklarować interfejs „TestInterface” z dwiema metodami, tj. method_one i method_two, to deklaracja TestInterface będzie wyglądać następująco:
interface TestInterface{ void method_one(); void method_two(); }
Zastosowania interfejsu w Javie
- Interfejsy w Javie zapewniają 100% abstrakcji, ponieważ mogą mieć tylko abstrakcyjne metody.
- Korzystając z interfejsów, możemy osiągnąć wielokrotne dziedziczenie w Javie, co nie jest możliwe przy użyciu klas.
- Aby uzyskać luźne połączenie, można użyć interfejsu.
Jak zaimplementować interfejs w Javie
Po zadeklarowaniu interfejsu możemy go używać w klasie używając słowa kluczowego „implements” w deklaracji klasy.
To słowo kluczowe „narzędzia” pojawia się po nazwie klasy, jak pokazano poniżej:
class implements { //class body }
Implementacja interfejsu jest taka sama, jak podpisanie umowy. Stąd klasa implementująca interfejs oznacza, że podpisała kontrakt i zgodziła się zaimplementować abstrakcyjne metody interfejsu lub innymi słowy wykonać zachowanie określone przez interfejs.
Jeśli klasa implementująca interfejs nie implementuje dokładnego zachowania określonego w interfejsie, wówczas klasa musi zostać zadeklarowana jako abstrakcyjna.
Przykład implementacji interfejsu
Poniżej podano prosty przykład interfejsu w Javie.
//interface declaration interface Polygon_Shape { void calculateArea(int length, int breadth); } //implement the interface class Rectangle implements Polygon_Shape { //implement the interface method public void calculateArea(int length, int breadth) { System.out.println('The area of the rectangle is ' + (length * breadth)); } } class Main { public static void main(String[] args) { Rectangle rect = new Rectangle(); //declare a class object rect.calculateArea(10, 20); //call the method } }
Wynik:
Powyższy program demonstruje prosty przykład interfejsów w Javie. Tutaj deklarujemy interfejs o nazwie Polygon_Shape, a następnie implementuje go klasa Rectangle.
Konwencja nazewnictwa interfejsów w języku Java
Konwencje nazewnictwa Java to wytyczne dotyczące nazewnictwa, których musimy przestrzegać jako programiści, abyśmy mogli stworzyć czytelny, spójny kod. Java używa notacji „TitleCase” dla klas nazewnictwa i interfejsów. Używa notacji „CamelCase” dla zmiennych, metod itp.
Jeśli chodzi o interfejs, nazwa interfejsu znajduje się w tytule, a pierwsza litera każdego słowa nazwy interfejsu jest pisana wielką literą. Nazwy interfejsów są tak dobrane, że są zazwyczaj przymiotnikami. Ale kiedy interfejsy reprezentują rodzinę klas, takich jak mapa lub lista, wówczas można je nazwać po rzeczownikach.
Poniżej podano przykłady prawidłowych nazw interfejsów:
public interface Iterable {} public interface List {} public interface Serializable {} public interface Clonable {} public interface Runnable {}
Konstruktor interfejsu
Następne pytanie brzmi, czy interfejs ma konstruktora?
Wiemy, że do wywoływania metod potrzebujemy obiektów. Do tworzenia obiektów potrzebujemy konstruktorów. Ale w przypadku interfejsów w Javie metody nie są zaimplementowane.
Wszystkie metody interfejsów są abstrakcyjne. Dlatego nie ma sensu wywoływać tych metod z interfejsu. Po drugie, ponieważ interfejsy są domyślnie abstrakcyjne, nie możemy tworzyć obiektów interfejsu. Dlatego nie potrzebujemy konstruktorów interfejsu.
Metody interfejsu
W tej sekcji omówimy, jak deklarować metody interfejsu. Z reguły interfejs może mieć tylko metody publiczne lub domyślnie metody interfejsu są publiczne. Żaden inny modyfikator dostępu nie może być używany wewnątrz interfejsu.
Więc niezależnie od tego, czy wyraźnie to zadeklarujemy, czy nie, każda metoda w interfejsie jest domyślnie abstrakcyjna i widoczna publicznie.
Stąd, jeśli void printMethod () jest prototypem, który zamierzamy zadeklarować w interfejsie, to poniższe deklaracje są takie same.
void printMethod(); public void printMethod(); abstract void printMethod (); public abstract void printMethod ();
Zauważ, że nie możemy użyć następujących modyfikatorów wewnątrz interfejsu dla metod interfejsu.
- finał
- statyczny
- Prywatny
- chroniony
- zsynchronizowane
- ojczysty
- ścisłefp
Teraz zaimplementujmy program w języku Java, aby zademonstrować widoczność metod interfejsu.
//declare an interface interface TestInterface { void printMethod(); //default visibility is public. } //interface implementation class TestClass implements TestInterface { //if the access modifier is changed to any other, compiler generates error public void printMethod() { System.out.println('TestClass::printMethod()'); } } class Main { public static void main(String[] args) { TestClass tc = new TestClass(); //create an object tc.printMethod(); //call concrete method } }
Wynik:
Jak już wspomniano, domyślnie metody interfejsu są publiczne. Stąd jeśli nie określimy żadnego modyfikatora dostępu dla metody interface, to jest on publiczny jak w powyższym programie.
Załóżmy, że zmienimy deklarację metody interfejsu w powyższym programie w następujący sposób:
private void printMethod ();
Oznacza to, że określiliśmy metodę interfejsu printMethod () jako prywatną. Kiedy kompilujemy program, otrzymujemy następujący błąd kompilatora.
błąd: modyfikator prywatny nie jest tutaj dozwolony
private void printMethod ();
Drugi przypadek, który możemy przetestować, to zmiana modyfikatora zaimplementowanej metody w klasie TestClass z public na private. Teraz domyślny modyfikator w klasie jest prywatny. Po prostu usuwamy słowo kluczowe public z prototypu metody w klasie w następujący sposób:
void printMethod() { System.out.println('TestClass::printMethod()'); }
Jeśli teraz skompilujemy program, otrzymamy następujący błąd.
błąd: printMethod () w TestClass nie może zaimplementować printMethod () w TestInterface
void printMethod ()
^
próba przypisania słabszych uprawnień dostępu; był publiczny
W związku z tym należy tutaj zauważyć, że nie możemy zmienić modyfikatora dostępu zaimplementowanej metody interfejsu na żaden inny modyfikator dostępu. Ponieważ metody interfejsu są domyślnie publiczne, gdy są implementowane przez klasy implementujące interfejsy, te metody również powinny być publiczne.
Pola interfejsu w Javie
Pola lub zmienne zadeklarowane w interfejsie są domyślnie publiczne, statyczne i końcowe. Oznacza to, że raz zadeklarowana ich wartość nie może zostać zmieniona.
Zauważ, że jeśli pola interfejsu są zdefiniowane bez określenia któregokolwiek z tych modyfikatorów, kompilatory Java przyjmują te modyfikatory. Na przykład, jeśli nie podamy publicznego modyfikatora podczas deklarowania pola w interfejsie, to jest on zakładany domyślnie.
Gdy interfejs jest implementowany przez klasę, zapewnia implementację dla wszystkich metod abstrakcyjnych interfejsu. Podobnie wszystkie pola zadeklarowane w interfejsie są również dziedziczone przez klasę implementującą interfejs. W ten sposób kopia pola interfejsu jest obecna w klasie implementującej.
Teraz wszystkie pola w interfejsie są domyślnie statyczne. Dlatego możemy uzyskać do nich dostęp, używając bezpośrednio nazwy interfejsu, tak samo jak uzyskujemy dostęp do pól statycznych klasy przy użyciu nazwy klasy, a nie obiektu.
Poniższy przykładowy program Java pokazuje, jak możemy uzyskać dostęp do pól interfejsu.
//interface declaration interface TestInterface{ public static int value = 100; //interface field public void display(); } //Interface implementation class TestClass implements TestInterface{ public static int value = 5000; //class fields public void display() { System.out.println('TestClass::display () method'); } public void show() { System.out.println('TestClass::show () method'); } } public class Main{ public static void main(String args[]) { TestClass testObj = new TestClass(); //print interface and class field values. System.out.println('Value of the interface variable (value): '+TestInterface.value); System.out.println('Value of the class variable (value): '+testObj.value); } }
Wynik:
Jak pokazano w powyższym programie, dostęp do pól interfejsu można uzyskać za pomocą nazwy interfejsu, po której następuje operator kropki (.), A następnie rzeczywista nazwa zmiennej lub pola.
Ogólny interfejs w Javie
Omówiliśmy typy generyczne języka Java w naszych wcześniejszych samouczkach. Oprócz ogólnych klas, metod itp., Możemy mieć również ogólne interfejsy. Interfejsy generyczne można określić w podobny sposób, w jaki określamy klasy generyczne.
Interfejsy ogólne są deklarowane z parametrami typu, które czynią je niezależnymi od typu danych.
Ogólna składnia interfejsu ogólnego jest następująca:
jak zadeklarować tablicę wielowymiarową w java
interface { //interface methods and variables }
Teraz, jeśli chcemy użyć powyższego interfejsu ogólnego w klasie, możemy to zrobić definicja klasy, jak pokazano poniżej:
class implements interface_name { //class body }
Zauważ, że musimy określić tę samą listę parametrów z klasą, co w interfejsie.
Poniższy program w języku Java demonstruje interfejsy ogólne w języku Java.
//generic interface declaration interface MinInterface>{ T minValue(); } //implementation for generic interface class MinClassImpl> implements MinInterface { T[] intArray; MinClassImpl(T[] o) { intArray = o; } public T minValue() { T v = intArray[0]; for (int i = 1; i intMinValue = new MinClassImpl (intArray); MinClassImpl charMinValue = new MinClassImpl(charArray); //call interface method minValue for int type array System.out.println('Min value in intOfArray: ' + intMinValue.minValue()); //call interface method minValue for char type array System.out.println('Min value in charOfArray: ' + charMinValue.minValue()); }
Wynik:
Powyższy program implementuje interfejs zawierający metodę znalezienia minimalnej wartości w tablicy. To jest interfejs ogólny. Klasa implementuje ten interfejs i przesłania metodę. W metodzie main wywołujemy metodę interface, aby znaleźć minimalną wartość w postaci liczby całkowitej i tablicy znaków.
Wiele interfejsów w Javie
W naszym temacie dotyczącym dziedziczenia widzieliśmy, że Java nie pozwala klasie na dziedziczenie z wielu klas, ponieważ powoduje to niejednoznaczność zwaną „Problemem diamentu”.
Jednak klasa może dziedziczyć lub implementować więcej niż jeden interfejs. W tym przypadku jest to dziedziczenie wielokrotne. Więc chociaż nie wolno nam implementować wielokrotnego dziedziczenia w Javie poprzez klasy, możemy to zrobić za pomocą interfejsów.
Poniższy diagram przedstawia wielokrotne dziedziczenie przy użyciu interfejsów. Tutaj klasa implementuje dwa interfejsy, tj. Interface_one i Interface_two.
Zwróć uwagę, że kiedy klasa implementuje wiele interfejsów, nazwy interfejsów są rozdzielane przecinkami w deklaracji klasy. Możemy zaimplementować tyle interfejsów, o ile jesteśmy w stanie obsłużyć złożoność.
Program Java, który demonstruje wiele interfejsów, jest pokazany poniżej.
//Interface_One declaration interface Interface_One{ void print(); } //Interface_Two declaration interface Interface_Two{ void show(); } //multiple inheritance - DemoClass implementing Interface_One&Interface_Two class DemoClass implements Interface_One,Interface_Two{ public void print(){ //Override Interface_One print() System.out.println('Democlass::Interface_One_Print ()'); } public void show(){ //Override Interface_Two show() System.out.println('DemoClass::Interface_Two_Show ()'); } } public class Main{ public static void main(String args[]){ DemoClass obj = new DemoClass(); //create DemoClass object and call methods obj.print(); obj.show(); } }
Wynik:
10 najlepszych stron z anime angielski dub
Jak pokazano powyżej, implementujemy dwa interfejsy. Następnie nadpisujemy ich odpowiednie metody i wywołujemy je w metodzie głównej.
Dziedziczenie wielokrotne w Javie zapewnia wszystkie korzyści, jakie daje dziedziczenie wielokrotne w C ++. Jednak w przeciwieństwie do dziedziczenia wielokrotnego przy użyciu klas, dziedziczenie wielokrotne przy użyciu interfejsów nie jest niejednoznaczne.
Dziedziczenie interfejsu w języku Java: interfejs rozszerza interfejs
Kiedy klasa implementuje interfejs, odbywa się to za pomocą „ przybory ”Słowo kluczowe. W Javie interfejs może dziedziczyć inny interfejs. Odbywa się to za pomocą „ rozciąga się ”Słowo kluczowe. Gdy interfejs rozszerza inny interfejs, nazywa się to „ Dziedziczenie interfejsu ”W języku Java.
Poniżej przedstawiono program Java do implementacji dziedziczenia interfejsu.
//Interface_One declaration interface Interface_One{ void print(); } //Interface_Two declaration; inherits from Interface_One interface Interface_Two extends Interface_One{ void show(); } //multiple inheritance - DemoClass implementing Interface_Two class DemoClass implements Interface_Two{ public void print(){ //Override Interface_Two print() System.out.println('Democlass public class Main{ public static void main(String args[]){ DemoClass obj = new DemoClass(); //create DemoClass object and call methods obj.print(); obj.show(); } }
Wynik:
Zmodyfikowaliśmy ten sam program, którego używaliśmy do wielokrotnego dziedziczenia, używając interfejsów, aby zademonstrować dziedziczenie interfejsu. Tutaj rozszerzamy Interface_one w Interface_two, a następnie przechodzimy do implementacji Interface_two w klasie. Ponieważ interfejsy są dziedziczone, obie metody są dostępne do przesłaniania.
Często Zadawane Pytania
Pytanie 1) Jakie jest zastosowanie interfejsu w Javie?
Odpowiedź: Interfejs w Javie to jednostka używana do uzyskania 100% abstrakcji. Może zawierać tylko metody abstrakcyjne, które mogą zostać przesłonięte przez klasę implementującą interfejs.
Interfejs w pewnym sensie działa jak plan klasy, w którym dostarcza klasie abstrakcyjne prototypy metod i stałe statyczne, a następnie klasa musi przesłonić te metody, implementując interfejs.
Pytanie 2) Jakie są zalety interfejsu w Javie?
Odpowiedź: Niektóre zalety interfejsu są następujące:
- Interfejs działa jak plan klasy.
- Interfejs zapewnia 100% abstrakcji w Javie, ponieważ zawiera wszystkie metody abstrakcyjne.
- Interfejsy mogą służyć do wielokrotnego dziedziczenia w Javie. Java nie pozwala na dziedziczenie z więcej niż jednej klasy, ale klasa może implementować wiele interfejsów.
# 3) Czy interfejs może mieć metody?
Odpowiedź: Interfejsy mogą mieć prototypy metod oraz stałe statyczne i końcowe. Ale począwszy od Java 8, interfejsy mogą zawierać metody statyczne i domyślne.
Q # 4) Czy możemy zadeklarować interfejs jako ostateczny?
Odpowiedź: Nie. Jeśli zadeklarujemy interfejs jako ostateczny, klasa nie będzie w stanie go zaimplementować. Bez implementacji przez żadną klasę interfejs nie będzie służył żadnemu celowi.
Więcej o interfejsach
Interfejsy są planami takimi jak class, ale będą miały tylko deklarację metody. Nie będzie mieć żadnej metody implementacji. Wszystkie metody w interfejsie są domyślnie publiczne abstrakcyjne. Interfejs Java 1.8 może mieć metody statyczne i domyślne.
Interfejsy są używane głównie w interfejsach API.
Na przykład: Weź pod uwagę, że projektujesz silnik pojazdu.
Kiedy skończysz z częścią sprzętową, chcesz, aby niektóre funkcje oprogramowania zostały zaimplementowane przez klienta, który używa twojego silnika. W takim przypadku możesz zdefiniować funkcje silnika w interfejsie.
Interface Engine { void changeGear(int a); void speedUp(int a); }
Zasady dotyczące interfejsu
- Klasa implementująca interfejs powinna implementować wszystkie metody w interfejsie.
- Interfejs może zawierać końcowe zmienne.
public class Vehicle implements Engine { int speed; int gear; @Override public void speedUp(int a) { this.speed=a; System.out.println('speed'+speed); } @Override public void changeGear(int a) { this.gear=a; System.out.println('gear'+gear); } public static void main(String[] args) { // TODO Auto-generated method stub Vehicle objv=new Vehicle(); objv.changeGear(3); objv.speedUp(70); } }
Tutaj klasa Pojazd jest podklasą implementującą interfejs silnika.
Co to są klasy abstrakcyjne?
Klasa abstrakcyjna jest podobna do klasy, ale będzie zawierać metody abstrakcyjne i metody konkretne. Metody abstrakcyjne nie mają implementacji. Będzie mieć tylko deklarację metody.
Zasady obowiązujące na zajęciach abstrakcyjnych
- Nie można utworzyć wystąpienia klasy abstrakcyjnej.
- Klasa Child, która rozszerza klasę abstrakcyjną, powinna implementować wszystkie metody abstrakcyjne klasy nadrzędnej lub klasa Child powinna być zadeklarowana jako klasa abstrakcyjna.
Jeśli chcesz zaprojektować częściową implementację, możesz wybrać klasę abstrakcyjną.
Przykładowy program zajęć abstrakcyjnych:
EmployeeDetails.java
public abstract class EmployeeDetails { private String name; private int emp_ID; public void commonEmpDetaills() { System.out.println('Name'+name); System.out.println('emp_ID'+emp_ID); } public abstract void confidentialDetails(int s,String p); }
Klasa, która rozszerzy klasę abstrakcyjną.
HR.java
public class HR extends EmployeeDetails { private int salary; private String performance; @Override public void confidentialDetails(int s,String p) { this.salary=s; this.performance=p; System.out.println('salary=='+salary); System.out.println('performance=='+performance); } public static void main(String[] args) { HR hr =new HR(); hr.confidentialDetails(5000,'good'); } }
Najważniejsze punkty, na które należy zwrócić uwagę:
- W interfejsach wszystkie metody nie będą miały implementacji metody.
- Klasa implementująca interfejs powinna implementować wszystkie metody w tym konkretnym interfejsie.
- Klasy abstrakcyjne mogą mieć metody abstrakcyjne, a także zwykłe metody konkretne. Metody abstrakcyjne nie mają implementacji.
- Klasa rozszerzająca klasę abstrakcyjną powinna mieć implementację dla wszystkich metod abstrakcyjnych w klasie abstrakcyjnej.
- Jeśli podklasa nie zawiera wystarczających informacji, aby zaimplementować metody abstrakcyjne, należy zadeklarować podklasę jako klasę abstrakcyjną.
Wniosek
W tym poradniku przedstawiliśmy podstawowe pojęcia dotyczące interfejsów w Javie. Omówiliśmy definicję interfejsu wraz z potrzebą interfejsów. Zbadaliśmy ich podstawową składnię i definicję. Następnie omówiliśmy, jak używać interfejsów, dla których używamy słowa kluczowego „implements”.
Dowiedzieliśmy się, jak korzystać z wielu interfejsów i dziedziczenia interfejsów w Javie. Korzystając z wielu interfejsów możemy wdrożyć wielokrotne dziedziczenie w Javie. Dziedziczenie interfejsu ma miejsce, gdy jeden interfejs rozszerza inny interfejs.
=> Odwiedź tutaj, aby zobaczyć serię szkoleń Java dla wszystkich
rekomendowane lektury
- OOP Java: Wprowadzenie do programowania obiektowego w Javie
- Porównywalne i porównawcze interfejsy w Javie
- Udoskonalenia interfejsu w języku Java 8 - interfejs funkcjonalny języka Java
- Samouczek dotyczący interfejsu mapy Java z implementacją i przykładami
- Interfejs ListIterator w Javie z przykładami
- Interfejs markera w Javie: serializowalny i klonowalny
- Ustaw interfejs w języku Java: samouczek dotyczący zestawu Java z przykładami
- Samouczek dotyczący refleksji w języku Java z przykładami