' 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?
- Prečo potrebujeme rozhranie?
- Deklarácia rozhrania Java: Syntax
- Príklad rozhrania Java
- Vnorenie rozhrania Java
- Rozdiel medzi triedou a rozhraním
- Výhody a nevýhody rozhrania
- Kľúčové body na rozhraní Java
Č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 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.