' Berło to zaawansowany poziom osiągania abstrakcji w języku programowania Java. Interfejs Java pomaga w redukcja złożoności w kodzie i upraszcza czytelność . W tym artykule wyjaśnię ci interfejs Java za pomocą następującego dokumentu.
- Co to jest interfejs Java?
- Dlaczego potrzebujemy interfejsu?
- Deklarowanie interfejsu Java: składnia
- Przykład interfejsu Java
- Zagnieżdżanie interfejsu Java
- Różnica między klasą a interfejsem
- Zalety i wady interfejsu
- Kluczowe punkty dotyczące interfejsu Java
Co to jest interfejs Java?
Interfejs komputerowy jest znany jako granica oddzielająca dwa lub więcej systemów. Wymienia dane między komponentami w systemie, które mogą przesyłać sygnały, polecenia lub protokoły.
Abstrakcja Java zapewnia funkcjonalność określonej metody, ukrywając logikę implementacji zapisaną wewnątrz metody. Podobnie, interfejs Java jest również klasą abstrakcyjną, która zawiera deklarację metody, ale nie zawiera jej definicji. Klasa przybory Interfejs do dziedziczenia metod abstrakcyjnych. Wraz z metodami abstrakcyjnymi, plik berło może również zawierać stałe, metody statyczne, interfejsy zagnieżdżone i metody domyślne.
Podobieństwa między klasą a interfejsem.
Interfejs jest całkowicie podobny do normalnej klasy w Javie. Interfejs zawiera metody abstrakcyjne i te metody są przeznaczone do implementacji. Ten proces jest po prostu równy dziedziczeniu, co jest normalne w przypadku klas. Omówimy więcej na temat podobieństw.
- Podobnie jak klasa, interfejs może również zawierać dowolną liczbę metod.
- Podobnie jak w przypadku klas, interfejs jest również napisany z rozszerzeniem .Jawa plik rozszerzenia.
- Co zaskakujące, kod bajtowy interfejsu pojawi się w pliku .klasa plik.
- Interfejs jest wyświetlany w postaci pakietu, a odpowiadający mu kod bajtowy znajduje się w katalogu zgodnym z nazwą pakietu.
Dlaczego potrzebujemy interfejsu?
Java nie obsługuje Wielokrotne spadki, w związku z tym nie pozwoli klasom na rozszerzenie więcej niż jednej klasy w jednej instancji. Klasy dla dzieci nie mógł odziedziczyć właściwości wiele klas nadrzędnych w jednym przypadku, ponieważ skutkuje Diamentowy problem. Aby rozwiązać ten problem, Berło jest wprowadzony. Zrozummy ten problem na przykładzie.
Załóżmy, że mamy dwa samoloty, tylko jeden może unieść pasażerowie, tylko drugi pozycja. Teraz musimy dziedziczyć właściwości samolotu transportowego i pasażerskiego. Java nie będzie obsługiwać tego rozwiązania, ponieważ kończy się w Dwuznaczność między dwoma płaszczyznami.
Ale jeśli możesz to umożliwić, dając Javie poczucie, że dziedziczy jedną płaszczyznę i realizowanie metody obecne na drugiej płaszczyźnie. To jest jak samolot komercyjny, który zabiera zarówno pasażerów, jak i bagaż. Interfejs jest jak tworzenie większej płaszczyzny, która mogłaby wykonywać oba zadania bez ingerencji w komponenty siebie nawzajem, zamiast tego po prostu pożyczać metody z Klasa interfejsu.
// Kod klasy A.
hashmap i hashtable w java
pakiet wielu klas A {void msg () {System.out.println ('Hello')}}
// Kod klasy B.
pakiet wielu klas B {void msg () {System.out.println ('Witamy')}}
Kod klasy C.
pakiet wielu klas C rozszerza A, B {// To nie zostanie zaakceptowane przez Javę, wyrzuci błąd i kod nie zostanie wykonany. public static void main (String args []) {C obj = new C () obj.msg ()}}
Wynik:
Błąd. To szczególne podejście zgłasza wyjątek. Java nie obsługuje dziedziczenia wielokrotnego. Ten błąd jest znany jako Diamentowy problem
Wypróbujmy rozwiązanie za pomocą interfejsu, Klasy dzieci może uzyskać dostęp do metod z Wielokrotny rodzic klasy w jednym wystąpieniu.
// Kod interfejsu
pakiet rozwiązanie interfejsu publicznego MIS {public void Hello () public void Welcome ()}
//Kod klasowy
pakiet MIS public class classA implementuje rozwiązanie {public void Hello () {java.lang.System.out.println ('Hello world')} public void Welcome () {java.lang.System.out.println ('Witamy w Edureka ')} public static void main (String [] args) {classA Edureka = new classA () Edureka.Hello () Edureka.Welcome ()}}
Wynik:
Witaj świecie
Witamy w Edurece
Deklarowanie interfejsu Java: składnia
interfejs nazwa_interfejsu {// deklaruj pola stałe // deklaruj metody () // metody domyślne}
Przeanalizujmy przykład dotyczący interfejsu Java
Przykład interfejsu Java
Stwórzmy prosty kalkulator oparty na interfejsie Java.
// Kod interfejsu
pakiet basicoperations publiczny interfejs matematyka {public void add () public void sub () public void mul () public void div ()}
//Kod klasowy
pakiet podstawowe operacje import java.util.Scanner public class student1 implementuje matematykę {@Override public void add () {Scanner kb = new Scanner (System.in) System.out.println ('Wpisz dwie dowolne liczby całkowite, aby wykonać dodanie') int a = kb.nextInt () int b = kb.nextInt () int s = a + b System.out.println ('Suma' + a + 'i' + b + 'is' + s)} @Override public void sub () {Scanner kb = new Scanner (System.in) System.out.println ('Wpisz dwie dowolne liczby całkowite do wykonania odejmowania') int a = kb.nextInt () int b = kb.nextInt () int s = ab System.out.println ('Różnica' + a + 'i' + b + 'to' + s)} @Override public void mul () {Scanner kb = new Scanner (System.in) System.out.println ('Enter mnożenie dowolnych dwóch liczb całkowitych ') int a = kb.nextInt () int b = kb.nextInt () int s = a * b System.out.println (' Product of '+ a +' and '+ b +' is '+ s)} @Override public void div () {Scanner kb = new Scanner (System.in) System.out.println ('Wpisz dwie dowolne liczby całkowite') int a = kb.nextInt () int b = kb.nextInt () int s = a / b System.out.p rintln ('Iloraz' + a + 'i' + b + 'to' + s)} public static void main (String [] args) {student1 Edureka1 = new student1 () Edureka1.add () Edureka1.sub () Edureka1. mul () Edureka1.div ()}}
Wynik:
Idąc dalej, nauczymy się zagnieżdżać interfejs Java.
Zagnieżdżanie interfejsu Java
Zagnieżdżanie interfejsów jest procesem deklarowania interfejsu wewnątrz innego Istniejący interfejs lub deklarowanie interfejsu wewnątrz pliku Klasa. Zagnieżdżony interfejs jest również znany jako Wewnętrzny interfejs.
Nie można uzyskać dostępu do interfejsu zagnieżdżonego bezpośrednio . W związku z tym zagnieżdżanie jest realizowane w celu rozwiązania przestrzeni nazw poprzez grupowanie ich z pokrewnymi Interfejsy i Zajęcia. Dzięki tej procedurzemożemy zadzwonić do Zagnieżdżony interfejs przez Klasa zewnętrzna lub Interfejs zewnętrzny nazwa, po której następuje kropka (.) , i Nazwa interfejsu.
Wypróbujmy kilka przykładów opartych na Zagnieżdżanie interfejsów. Najpierw spróbujmy zagnieździć plik Interfejs Java wewnątrz innego Interfejs Java jak pokazano niżej:
// Kod interfejsu
pakiet Publiczny interfejs Nest OuterInterface {void display () interfejs InnerInterface {void InnerMethod ()}}
//Kod klasowy
Package Nest Klasa NestedInterfaceDemo implementuje OuterInterface.InnerInterface {public void InnerMethod () {int n = 10, t1 = 0, t2 = 1 System.out.print ('First' + n + 'terms:') for (int i = 1 i & lt = n ++ i) {System.out.print (t1 + '+') int sum = t1 + t2 t1 = t2 t2 = sum} System.out.println ('nPrinting from Nested InnerInterface method ...! n ')} public static void main (String args []) {OuterInterface.InnerInterface obj = new NestedInterfaceDemo () obj.InnerMethod ()}}
Wynik:
Pierwsze 10 terminów: 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + Drukowanie metodą Nested InnerInterface ...!
Teraz spróbujmy zagnieździć Interfejs Java wewnątrz a Klasa Java.
// Kod interfejsu
pakiet Publiczna klasa Nest2 EdurekaClass {interfejs EdurekaInterface {void NestedMethod ()}}
//Kod klasowy
pakiet Nest2 klasa NestedInterfaceDemo2 implementuje EdurekaClass.EdurekaInterface {public void NestedMethod () {String input = 'Edureka' bajt [] strAsByteArray = input.getBytes () byte [] result = new byte [strAsByteArray.lAength] for (inttAstr = .length i ++) result [i] = strAsByteArray [strAsByteArray.length-i-1] System.out.println (new String (result))} public static void main (String args []) {EdurekaClass.EdurekaInterface obj = new NestedInterfaceDemo2 () obj.NestedMethod ()}}
Wynik:
akerudE
Chociaż interfejs wygląda prawie podobnie do klasy, istnieją między nimi różnice. Omówmy ich różnice.
Różnica między klasą Java a interfejsem Java
BERŁO | KLASA |
Obsługuje wielokrotne dziedziczenie | Nie obsługuje dziedziczenia wielokrotnego |
Nie ma członków danych | Obejmuje członków danych |
Nie ma konstruktorów | Obejmuje konstruktorów |
Obejmuje niekompletnych członków (podpisanych członków) | Obejmuje zarówno członków Complete (Abstract), jak i Incomplete |
Nie ma modyfikatorów dostępu | Zawiera modyfikatory dostępu |
Interfejs nie ma statycznych elementów członkowskich | Klasa ma wszystkie swoje elementy członkowskie jako statyczne |
Zalety i wady interfejsu Java
Zalety:
- Interfejs Java obsługuje Dziedziczenie wielokrotne.
- Interfejs Java umożliwia programistom rozbicie złożonych podejść programistycznych i uproszczenie zależności między obiektami.
- Interfejs Java sprawia, że członkowie danych i metody w aplikacji, która ma być luźno powiązana.
Niedogodności:
zamiana double na int
- Użycie interfejsu Java powoduje obniżenie poziomu szybkość wykonania wniosku.
- Interfejsy Java w aplikacji są używane wielokrotnie lub prawie wcale.
Kluczowe punkty dotyczące interfejsu Java
- Żadna z metod zadeklarowanych w interfejsie nie ma treści, dzięki której zapewnia pełną abstrakcję.
- Nie ma możliwości stworzenia obiektu interfejsu. Dlatego tworzenie instancji interfejsu nie jest możliwe.
- Klasa może zaimplementować interfejs przy użyciu słowa kluczowego implements. Zobaczmy to na przykładzie.
// Kod interfejsu
pakiet publiczny interfejs extInterface extInterface {public void method1 () public void method2 ()}
//Kod klasowy
pakiet extInterface import klasa java.util.Scanner Edureka implementuje extInterface {public void method1 () {System.out.println ('implementacja metody1') Scanner scanner = new Scanner (System.in) System.out.println ('Wpisz numer aby znaleźć pierwiastek kwadratowy w Javie: ') double square = scanner.nextDouble () double squareRoot = Math.sqrt (square) System.out.printf (' Pierwiastek kwadratowy z liczby:% f to:% f% n ', square, squareRoot)} public void method2 () {System.out.println ('implementacja metody2')} public static void main (String arg []) {extInterface obj = new Edureka () obj.method1 ()}}
Wynik:
implementacja metody1 Wpisz liczbę, aby znaleźć pierwiastek kwadratowy w Javie: 16 Pierwiastek kwadratowy z liczby: 16,0 wynosi: 4,0
- Klasa może implementować wiele dziedziczenia w jednym wystąpieniu. Zrozummy to za pomocą następującego kodu.
// Kod interfejsu 1
pakiet ExtendInt publiczny interfejs Interface1 {public void armstrong ()}
// Kod interfejsu 2
pakiet ExtendInt publiczny interfejs Interface2 {public void prime ()} // Class Code package ExtendInt public class Edureka2 implementuje Interface1, Interface2 {public void armstrong () {int c = 0, a, temp int n = 153 // input temp = n while (n & gt0) {a = n% 10 n = n / 10 c = c + (a * a * a)} if (temp == c) System.out.println ('liczba Armstronga') else System.out.println ('Not armstrong number') System.out.println ('Extending to Interface 1')} public void prime () {int i, m = 0, flag = 0 int n = 3 // input m = n / 2 if (n == 0 || n == 1) {System.out.println (n + 'nie jest liczbą pierwszą')} else {for (i = 2i & lt = mi ++) {if (n% i == 0) {System .out.println (n + 'nie jest liczbą pierwszą') flag = 1 przerwa}} if (flaga == 0) {System.out.println (n + 'jest liczbą pierwszą')}} System.out.println ('Rozszerzanie to Interface 2 ')} public static void main (String args []) {Interface2 obj = new Edureka2 () obj.prime () Interface1 obj1 = new Edureka2 () obj1.armstrong ()}}
Wynik:
3 to liczba pierwsza Rozszerzająca się do interfejsu 2 liczba Armstronga Rozszerzona do interfejsu 1
- Interfejs Java wymaga, aby zmienne zadeklarowane zostały zainicjowane w momencie deklaracji.
- Modyfikatory dostępu dla interfejsu są domyślnie ustawione jako public static i final. Zrozummy to na przykładzie
// Kod interfejsu
pakiet test publiczny interfejs Try {// public int a = 10 // public static final int a = 10 // static int a = 0 // final int a = 10 // int a = 10}
- Wszystkie powyższe deklaracje są prawdziwe i ważne w interfejsie.
- Interfejs Java może rozszerzyć dowolną liczbę interfejsów, ale nigdy nie może zaimplementować żadnego.
- Klasa Java może implementować dowolną liczbę interfejsów.
- Klasa Java nie może implementować interfejsów o tej samej nazwie metody i innym zwracanym typie.
- Jeśli istnieją dwie lub więcej metod o tej samej nazwie metody, istnieją w wielu interfejsach, wystarczy jednorazowe zaimplementowanie metody. Zrozummy to na praktycznym przykładzie.
// Kod interfejsu
pakiet ten sam publiczny interfejs A {public void display ()} // pakiet kodu interfejsu ten sam publiczny interfejs B {public void display ()} // pakiet kodu klasy ta sama klasa ta sama implementacja A, B {public void display () {System.out .println ('wyświetlanie danych')} public static void main (String [] args) {same print = new same () print.display ()}}
Wynik:
Witamy w e-learningu Edureka
Tym samym dochodzimy do końca tego artykułu. Mam nadzieję, że zrozumiałeś znaczenie interfejsu, składni, funkcjonalności, zagnieżdżania interfejsu, kluczowych punktów interfejsu Java i operacji wykonywanych przy ich użyciu.
Teraz, gdy znasz już podstawy języka Java, zapoznaj się z autorstwa Edureka, zaufanej firmy zajmującej się edukacją online, z siecią ponad 250 000 zadowolonych uczniów rozsianych po całym świecie. Szkolenie i certyfikacja J2EE i SOA firmy Edureka jest przeznaczony dla studentów i profesjonalistów, którzy chcą zostać programistą Java. Kurs ma na celu zapewnienie przewagi w programowaniu w języku Java i przeszkolenie zarówno podstawowych, jak i zaawansowanych koncepcji Java, a także różnych struktur Java, takich jak Hibernate i Wiosna .
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy tego bloga „Interfejs Java”, a skontaktujemy się z Tobą tak szybko, jak to możliwe.