Čo je rozhranie v Jave a ako ho implementovať?



Tento článok vám pomôže s komplexným prístupom k rozhraniu Java a s rôznymi typmi príkladov súvisiacich s jeho funkčnosťou.

' Rozhranie je pokročilá úroveň dosiahnutia abstrakcie v programovacom jazyku Java. Java rozhranie pomáha v zníženie zložitosti v kóde a zjednodušuje čitateľnosť . V tomto článku vám vysvetlím rozhranie Java prostredníctvom nasledujúceho dokumentu.

Čo je to rozhranie Java?

Rozhranie počítača je známa ako hranica, ktorá oddeľuje dva alebo viac systémov. Vymieňa si údaje medzi komponentmi v systéme, ktoré môžu vysielať signály, príkazy alebo protokoly.





java-interface

Java Abstraction poskytuje funkčnosť konkrétnej metódy skrytím implementačnej logiky napísanej vo vnútri metódy. Podobne je rozhranie Java tiež abstraktnou triedou, ktorá obsahuje deklaráciu metódy, ale nie jej definíciu. Trieda náradie rozhranie na dedenie abstraktných metód. Spolu s abstraktnými metódami, an rozhranie môže obsahovať aj konštanty, statické metódy, vnorené rozhrania a predvolené metódy.



Podobnosti medzi triedou a rozhraním.

Rozhranie je úplne podobné bežnej triede v Jave. Rozhranie obsahuje abstraktné metódy a tieto metódy sú určené na implementáciu. Tento proces sa rovná iba dedičnosti, čo je pri hodinách bežné. Budeme diskutovať viac o podobnostiach.

  • Rovnako ako trieda, rozhranie môže obsahovať aj toľko požadovaných metód.
  • Podobne ako v prípade tried, aj rozhranie je napísané znakom a .java príponový súbor.
  • Prekvapivo sa bajtový kód rozhrania objaví v a .trieda spis.
  • Rozhranie je zobrazené vo forme balíka a ich príslušný bajtkód je v adresári, ktorý sa zhoduje s názvom balíka.

Prečo potrebujeme rozhranie?

Java nepodporuje Viacnásobné dedičstvo, kvôli tomu, Nedovolí triedam rozšíriť viac ako jednu triedu v inštancii. Triedy detí nemohol zdediť vlastnosti viac rodičovských tried v jednom prípade, pretože výsledkom je Diamond problém. Na prekonanie tohto problému Rozhranie sa zavádza. Pochopme tento problém na príklade.



Predpokladajme, že máme dve roviny, jedna môže niesť iba jednu cestujúci, iba ten druhý pozíciu. Teraz musíme dediť vlastnosti nákladného aj osobného lietadla. Java by nepodporila toto riešenie, pretože končí v nejednoznačnosť medzi dvoma rovinami.

synchronizácia vlákien v príklade Java

Ale ak to umožníte tým, že budete mať v Jave pocit, že dedí jednu rovinu a implementácia metódy prítomné v druhej rovine. Je to ako komerčné lietadlo, ktoré vezme cestujúcich aj nákladnú batožinu. Rozhranie je ako vytvorenie väčšej roviny, ktorá by mohla robiť obe úlohy bez toho, aby zasahovala do vzájomných zložiek, namiesto toho, aby si požičiavala metódy z Trieda rozhrania.

// Kód triedy A

zabaliť viac tried A {void msg () {System.out.println ('Hello')}}

// Kód triedy B

zabaliť viac tried B {void msg () {System.out.println ('Vitajte')}}

Kód triedy C

balík viacerých tried C rozširuje A, B {// Java to nebude akceptovať, vyhodí to chybu a kód sa nespustí. public static void main (String args []) {C obj = new C () obj.msg ()}}

Výkon:

Chyba. Tento konkrétny prístup prináša výnimku. Java nepodporuje viacnásobné dedičstvo. Táto chyba je známa ako Diamond problém 

Vyskúšajme riešenie pomocou rozhrania, Triedy detí má prístup k metódam z Viacnásobný rodič triedy v jednej inštancii.

// Kód rozhrania

balík riešenia MIS pre verejné rozhranie {public void Hello () public void Welcome ()}

// Kód triedy

balíček MIS verejná trieda classA implementuje riešenie {public void Hello () {java.lang.System.out.println ('Hello world')} public void Welcome () {java.lang.System.out.println ('Welcome to Edureka ')} public static void main (String [] args) {classA Edureka = new classA () Edureka.Hello () Edureka.Welcome ()}}

Výkon:

Ahoj svet
Vitajte na Edureka

Deklarácia rozhrania Java: Syntax

rozhranie interface_name {// deklarovať konštantné polia // deklarovať metódy () // predvolené metódy}

Prejdime si príklad na rozhraní Java

Príklad rozhrania Java

Vytvorme si jednoduchú kalkulačku založenú na rozhraní Java.

// Kód rozhrania

základná obsluha balíka verejné rozhranie matematika {public void add () public void sub () public void mul () public void div ()}

// Kód triedy

balík basicoperations import java.util.Scanner public class student1 implements maths {@Override public void add () {Scanner kb = new Scanner (System.in) System.out.println ('Enter any two integer values ​​to perform addition') int a = kb.nextInt () int b = kb.nextInt () int s = a + b System.out.println ('Súčet' + a + 'a' + b + 'je' + s)} @ Override public void sub () {Scanner kb = new Scanner (System.in) System.out.println ('Na vykonanie odčítania zadajte ľubovoľné dve celočíselné hodnoty') int a = kb.nextInt () int b = kb.nextInt () int s = ab System.out.println ('Rozdiel znakov' + a + 'a' + b + 'je' + s)} @Override public void mul () {Scanner kb = new Scanner (System.in) System.out.println ('Enter akékoľvek dve celočíselné hodnoty násobenie ') int a = kb.nextInt () int b = kb.nextInt () int s = a * b System.out.println (' Produkt '+ a +' a '+ b +' je '+ s)} @Override public void div () {Scanner kb = new Scanner (System.in) System.out.println ('Enter any two integer values ​​division') int a = kb.nextInt () int b = kb.nextInt () int s = a / b System.out.p rintln ('Kvocient' + a + 'a' + b + 'je' + s)} public static void main (String [] args) {student1 Edureka1 = new student1 () Edureka1.add () Edureka1.sub () Edureka1. mul () Edureka1.div ()}}

Výkon:

Pri ďalšom postupe sa naučíme vnoriť rozhranie Java.

Vnorenie rozhrania Java

Vnorenie rozhrania je proces deklarovania rozhrania vo vnútri iného Existujúce rozhranie alebo deklarovanie rozhrania vo vnútri a Trieda. Vnorené rozhranie je tiež známe ako Vnútorné rozhranie.

Vnorené rozhranie nie je prístupné priamo . Preto je vnorenie implementované s cieľom vyriešiť menné priestory ich zoskupením s príbuznými Rozhrania a Triedy. Týmto postupommôžeme nazvať Vnorené rozhranie cez Vonkajšia trieda alebo Vonkajšie rozhranie meno, za ktorým nasleduje a bodka (.) a Názov rozhrania.

Skúsme na základe toho niekoľko príkladov Vnorenie rozhrania. Najskôr sa pokúsme hniezdiť a Rozhranie Java vo vnútri iného Rozhranie Java ako je ukázané nižšie:

// Kód rozhrania

balík Verejné rozhranie Nest OuterInterface {void display () interface InnerInterface {void InnerMethod ()}}

// Kód triedy

balíček Nest trieda NestedInterfaceDemo implementuje OuterInterface.InnerInterface {public void InnerMethod () {int n = 10, t1 = 0, t2 = 1 System.out.print ('Prvý' + n + 'výrazy:') pre (int i = 1 i & lt = n ++ i) {System.out.print (t1 + '+') int suma = t1 + t2 t1 = t2 t2 = suma} System.out.println ('nTlač z metódy Nested InnerInterface ...! n ')} public static void main (String args []) {OuterInterface.InnerInterface obj = new NestedInterfaceDemo () obj.InnerMethod ()}}

Výkon:

Prvých 10 výrazov: 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + Tlač z metódy Nested InnerInterface ...!

Teraz sa pokúsme vnoriť a Rozhranie Java vo vnútri a Trieda Java.

// Kód rozhrania

balík Nest2 verejná trieda EdurekaClass {rozhranie EdurekaInterface {void NestedMethod ()}}

// Kód triedy

balíček Nest2 trieda NestedInterfaceDemo2 implementuje EdurekaClass.EdurekaInterface {public void NestedMethod () {String input = 'Edureka' byte [] strAsByteArray = input.getBytes () byte [] result = new byte [strAsByteArray.length] pre (int i = 0 i & ar .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 ()}}

Výkon:

akerudE

Aj keď rozhranie vyzerá takmer podobne ako trieda, existujú medzi nimi určité rozdiely. Poďme si predstaviť ich rozdiely.

Rozdiel medzi triedou Java a rozhraním Java

ROZHRANIE TRIEDA
Podporuje viacnásobné dedičstvo Nepodporuje viacnásobné dedičstvo
Nemá dátových členov Zahŕňa dátových členov
Nemá konštruktérov Zahŕňa konštruktory
Zahŕňa neúplných členov (podpisový člen) Zahŕňa úplných (abstraktných) aj neúplných členov
Nemá modifikátory prístupu Zahŕňa modifikátory prístupu
Rozhranie nemá statických členov Trieda má všetkých členov ako statických

Výhody a nevýhody rozhrania Java

Výhody:

  • Podporuje rozhranie Java Viacnásobné dedičstvo.
  • Rozhranie Java umožňuje programátorom rozbiť zložité programovacie prístupy a zjednodušiť závislosti medzi objektmi.
  • Rozhranie Java umožňuje dátových členov a metódy v žiadosti, ktorá má byť voľne spojená.

Nevýhody:

  • Použitie rozhrania Java znižuje rýchlosť vykonania žiadosti.
  • Rozhrania Java v aplikácii sa buď vo veľkej miere používajú opakovane, alebo sa nepoužívajú vôbec.

Kľúčové body na rozhraní Java

  • Žiadna z metód deklarovaných v rozhraní nemá telo, vďaka ktorému poskytuje úplnú abstrakciu.
  • Nie je možné vytvoriť objekt rozhrania. Vytvorenie rozhrania preto nie je možné.
  • Trieda môže implementovať rozhranie pomocou kľúčového slova implements. Pozrime sa na to na príklade.

// Kód rozhrania

balík extInterface verejné rozhranie extInterface {public void method1 () public void method2 ()}

// Kód triedy

balíček extInterface import java.util.Scanner trieda Edureka implementuje extInterface {public void method1 () {System.out.println ('implementácia metódy1') Scanner scanner = nový Scanner (System.in) System.out.println ('Zadajte číslo nájsť druhú odmocninu v Jave: ') double square = scanner.nextDouble () double squareRoot = Math.sqrt (square) System.out.printf (' Druhá odmocnina čísla:% f je:% f% n ', druhá mocnina, squareRoot)} public void method2 () {System.out.println ('implementation of method2')} public static void main (String arg []) {extInterface obj = new Edureka () obj.method1 ()}}

Výkon:

implementácia metódy1 Zadajte číslo na nájdenie druhej odmocniny v Jave: 16 Druhá odmocnina čísla: 16.0 je: 4,0
  • Trieda môže implementovať viac dedičstiev v jednej inštancii. Pochopme to prostredníctvom nasledujúceho kódu.

// Kód rozhrania 1

balíček verejné rozhranie ExtendInt Interface1 {public void armstrong ()}

// Kód rozhrania 2

balík ExtendInt verejné rozhranie Interface2 {public void prime ()} // balíček kódu triedy ExtendInt verejná trieda Edureka2 implementuje Interface1, Interface2 {public void armstrong () {int c = 0, a, temp int n = 153 // vstupná teplota = n while (n & gt0) {a = n% 10 n = n / 10 c = c + (a * a * a)} if (temp == c) System.out.println ('armstrong number') else System.out.println ('Nie je silné číslo') System.out.println ('Rozšírenie na rozhranie 1')} public void prime () {int i, m = 0, flag = 0 int n = 3 // vstup m = n / 2 if (n == 0 || n == 1) {System.out.println (n + 'nie je prvočíslo')} else {for (i = 2i & lt = mi ++) {if (n% i == 0) {System .out.println (n + 'nie je prvočíslo') flag = 1 zalomenie}} if (flag == 0) {System.out.println (n + 'je prvočíslo')}} System.out.println ('Predĺženie do rozhrania 2 ')} public static void main (String args []) {Interface2 obj = new Edureka2 () obj.prime () Interface1 obj1 = new Edureka2 () obj1.armstrong ()}}

Výkon:

3 je prvočíslo rozširujúce sa na rozhranie 2 silné číslo rozširujúce sa na rozhranie 1
  • Rozhranie Java vyžaduje, aby sa deklarované premenné inicializovali v čase deklarácie.
  • Modifikátory prístupu pre rozhranie sú predvolene nastavené na verejné statické a konečné. Poďme to pochopiť na príklade

// Kód rozhrania

test balíkov verejné rozhranie Vyskúšajte {// public int a = 10 // public static final int a = 10 // static int a = 0 // final int a = 10 // int a = 10}
  • Všetky vyššie uvedené vyhlásenia sú v rozhraní platné a platné.
  • Rozhranie Java je schopné rozšíriť ľubovoľný počet rozhraní, nikdy však nemôže implementovať žiadne.
  • Trieda Java môže implementovať ľubovoľný počet rozhraní.
  • Trieda Java nemôže implementovať rozhrania s rovnakým názvom metódy a iným návratovým typom.
  • Ak existujú dve alebo viac metód s rovnakým názvom metódy, ktoré existujú vo viacerých rozhraniach, stačí implementácia metódy raz. Poďme to pochopiť na praktickom príklade.

// Kód rozhrania

príklad protokolovania protokolovania java util
balík rovnaké verejné rozhranie A {public void display ()} // balík kódu rozhrania rovnaké verejné rozhranie B {public void display ()} // balík kódu triedy rovnaká trieda rovnaká implementuje A, B {public void display () {System.out .println ('displaying data')} public static void main (String [] args) {same print = new same () print.display ()}}

Výkon:

Vitajte v programe Edureka E-Learning

Týmto sa dostávame na koniec tohto článku. Dúfam, že ste pochopili dôležitosť rozhrania, syntaxe, funkčnosti, vnorenia rozhrania, kľúčových bodov rozhrania Java a operácií vykonávaných s nimi.

Teraz, keď ste porozumeli základom Java, sa pozrite na autor: Edureka, dôveryhodná online vzdelávacia spoločnosť so sieťou viac ako 250 000 spokojných študentov rozmiestnených po celom svete. Výcvikový a certifikačný kurz Edureka Java J2EE a SOA je určený pre študentov a profesionálov, ktorí chcú byť vývojármi Java. Kurz je navrhnutý tak, aby vám dal náskok v programovaní v Jave a naučil vás základné aj pokročilé koncepty Javy spolu s rôznymi rámcami Java, ako je Hibernate & Jar .

Máte na nás otázku? Uveďte to v sekcii komentárov v tomto blogu „Rozhranie Java“ a my sa vám ozveme čo najskôr.