Co je rozhraní v Javě a jak jej implementovat?



Tento článek vám pomůže s komplexním přístupem k rozhraní Java a různými typy příkladů souvisejících s jeho funkčností.

' Rozhraní je pokročilá úroveň dosažení abstrakce v programovacím jazyce Java. Rozhraní Java pomáhá v snížení složitosti v kódu a zjednodušuje čitelnost . V tomto článku vám vysvětlím rozhraní Java prostřednictvím následující příručky.

Co je to rozhraní Java?

Počítačové rozhraní je známá jako hranice, která odděluje dva nebo více systémů. Přenáší data mezi komponenty v systému, které by mohly signály, příkazy nebo protokoly.





java-interface

Java Abstraction poskytuje funkce konkrétní metody skrytím implementační logiky napsané uvnitř metody. Podobně je rozhraní Java také abstraktní třídou, která zahrnuje deklaraci metody, ale nikoli její definici. Třída nářadí rozhraní, které zdědí abstraktní metody. Spolu s abstraktními metodami, an rozhraní může také zahrnovat konstanty, statické metody, vnořená rozhraní a výchozí metody.



Podobnosti mezi třídou a rozhraním.

Rozhraní je zcela podobné normální třídě v Javě. Rozhraní zahrnuje abstraktní metody a tyto metody jsou navrženy k implementaci. Tento proces se rovná pouze dědičnosti, což je normální, pokud jde o třídy. Budeme diskutovat více o podobnostech.

  • Stejně jako třída může rozhraní obsahovat také tolik počtů metod, kolik je požadováno.
  • Podobně jako u tříd je rozhraní také psáno s .Jáva přípona souboru.
  • Překvapivě se bytecode pro rozhraní objevil v a .třída soubor.
  • Rozhraní je zobrazeno ve formě balíčku a jejich příslušný bytecode je v adresáři, který odpovídá názvu balíčku.

Proč potřebujeme rozhraní?

Java nepodporuje Vícenásobné dědictví, kvůli tomu Nepovolí třídám v instanci rozšířit více než jednu třídu. Třídy dětí nemohl zdědit vlastnosti více nadřazených tříd v jedné instanci, protože to má za následek Diamond problém. K překonání tohoto problému Rozhraní je představen. Pochopme tento problém na příkladu.



Předpokládejme, že máme dvě letadla, jedna může nést pouze cestující, pouze ten druhý pozice. Nyní musíme zdědit vlastnosti nákladního letadla i osobního letadla. Java by toto řešení nepodporovala, protože končí v dvojznačnost mezi dvěma rovinami.

vytvořte parametr v tablo

Pokud to ale umožníte tím, že budete mít pocit, že Java zdědí jednu rovinu a provádění metody přítomné v druhé rovině. Je to jako komerční letadlo, které bere cestující i nákladní zavazadla. Rozhraní je jako vytvořit větší rovinu, která by dokázala dělat oba úkoly bez vzájemného ovlivňování složek, místo toho si jen vypůjčovat metody z Třída rozhraní.

// Kód třídy A

zabalit více tříd A {void msg () {System.out.println ('Hello')}}

// Kód třídy B

zabalit více tříd B {void msg () {System.out.println ('Vítejte')}}

Kód třídy C.

balíček více třídy C rozšiřuje A, B {// Toto nebude Java akceptovat, vyvolá chybu a kód nebude proveden. public static void main (String args []) {C obj = new C () obj.msg ()}}

Výstup:

Chyba. Tento konkrétní přístup vyvolá výjimku. Java nepodporuje více dědičností. Tato chyba je známá jako Diamond problém 

Zkusme řešení pomocí rozhraní, Dětské třídy může přistupovat k metodám z Více rodičů třídy v jedné instanci.

// Kód rozhraní

balíček řešení MIS pro veřejné rozhraní {public void Hello () public void Welcome ()}

// Kód třídy

balíček MIS public class classA implementuje řešení {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ýstup:

Ahoj světe
Vítejte v Edurece

Deklarace rozhraní Java: Syntaxe

interface interface_name {// deklarovat pole konstanty // deklarovat metody () // výchozí metody}

Pojďme si projít příklad na rozhraní Java

Příklad rozhraní Java

Vytvořme si jednoduchou kalkulačku založenou na rozhraní Java.

// Kód rozhraní

základní operace balíčku veřejné matematické rozhraní {public void add () public void sub () public void mul () public void div ()}

// Kód třídy

balíček 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 ('Sum of' + a + 'and' + b + 'is' + s)} @Override public void sub () {Scanner kb = new Scanner (System.in) System.out.println ('Enter any two integer values ​​to perform substraction') int a = kb.nextInt () int b = kb.nextInt () int s = ab System.out.println ('Rozdíl' + a + 'a' + b + 'je' + s)} @Override public void mul () {Scanner kb = new Scanner (System.in) System.out.println ('Enter libovolné dvě celočíselné hodnoty násobení ') 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ýstup:

Při dalším postupu se naučíme vnořit rozhraní Java.

Vnoření rozhraní Java

Vnoření rozhraní je proces deklarování rozhraní uvnitř jiného Stávající rozhraní nebo deklarace rozhraní uvnitř a Třída. Vnořené rozhraní je také známé jako Vnitřní rozhraní.

Vnořené rozhraní není přístupné přímo . Proto je vnoření implementováno za účelem vyřešení jmenných prostorů jejich seskupením s jejich souvisejícími Rozhraní a Třídy. Tímto postupemmůžeme zavolat Vnořené rozhraní skrz Vnější třída nebo Vnější rozhraní jméno následované a tečka (.) , a Název rozhraní.

Zkusme několik příkladů na základě Vnoření rozhraní. Nejprve se pokusme vnořit a Rozhraní Java uvnitř jiného Rozhraní Java Jak je ukázáno níže:

// Kód rozhraní

balíček Nest veřejné rozhraní OuterInterface {void display () interface InnerInterface {void InnerMethod ()}}

// Kód třídy

balíček Nest třída 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 součet = t1 + t2 t1 = t2 t2 = součet} System.out.println ('nTisk z vnořené metody InnerInterface ...! n ')} public static void main (String args []) {OuterInterface.InnerInterface obj = new NestedInterfaceDemo () obj.InnerMethod ()}}

Výstup:

Prvních 10 termínů: 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + Tisk z vnořené metody InnerInterface ...!

Nyní se pokusme vnořit a Rozhraní Java uvnitř a Třída Java.

// Kód rozhraní

balíček Nest2 veřejná třída EdurekaClass {rozhraní EdurekaInterface {void NestedMethod ()}}

// Kód třídy

balíček Nest2 třída NestedInterfaceDemo2 implementuje EdurekaClass.EdurekaInterface {public void NestedMethod () {String input = 'Edureka' byte [] strAsByteArray = input.getBytes () byte [] result = new byte [strAsByteArray.length] pro (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ýstup:

akerudE

Přestože rozhraní vypadá téměř podobně jako třída, existují mezi nimi určité rozdíly, pojďme diskutovat o jejich rozdílech.

Rozdíl mezi třídou Java a rozhraním Java

ROZHRANÍ TŘÍDA
Podporuje více dědičností Nepodporuje vícenásobné dědictví
Nemá datové členy Zahrnuje datové členy
Nemá konstruktory Zahrnuje konstruktory
Zahrnuje neúplné členy (podpisový člen) Zahrnuje jak úplné (abstraktní), tak neúplné členy
Nemá modifikátory přístupu Zahrnuje modifikátory přístupu
Rozhraní nemá statické členy Třída má všechny členy statické

Výhody a nevýhody rozhraní Java

Výhody:

  • Podporuje rozhraní Java Vícenásobné dědictví.
  • Rozhraní Java umožňuje programátorům rozbít složité programovací přístupy a zjednodušit závislosti mezi objekty.
  • Rozhraní Java umožňuje datové členy a metody v aplikaci, která má být volně spojena.

Nevýhody:

  • Použití Java rozhraní snižuje rychlost provedení aplikace.
  • Rozhraní Java v aplikaci jsou buď používána opakovaně ve velkém rozsahu, nebo téměř vůbec.

Klíčové body na rozhraní Java

  • Žádná z metod deklarovaných v rozhraní nemá tělo, díky němuž poskytuje úplnou abstrakci.
  • Není možné vytvořit objekt rozhraní. Instance rozhraní tedy není možná.
  • Třída může implementovat rozhraní pomocí implementace klíčových slov. Podívejme se na to na příkladu.

// Kód rozhraní

balíček extInterface veřejné rozhraní extInterface {public void method1 () public void method2 ()}

// Kód třídy

balíček extInterface import java.util.Scanner třída Edureka implementuje extInterface {public void method1 () {System.out.println ('implementace metody1') Scanner scanner = nový Scanner (System.in) System.out.println ('Zadejte číslo najít druhou odmocninu v Javě: ') 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ýstup:

implementace metody1 Zadejte číslo pro nalezení druhé odmocniny v Javě: 16 Druhá odmocnina čísla: 16.0 je: 4,0
  • Třída může implementovat více dědičností v jedné instanci. Rozumíme tomu prostřednictvím následujícího kódu.

// Kód rozhraní 1

balíček ExtendInt veřejné rozhraní Interface1 {public void armstrong ()}

// Kód rozhraní 2

balíček ExtendInt veřejné rozhraní Interface2 {public void prime ()} // balíček kódu třídy ExtendInt veřejná třída Edureka2 implementuje Interface1, Interface2 {public void armstrong () {int c = 0, a, temp int n = 153 // vstupní temp = 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 ('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 + 'není prvočíslo')} else {for (i = 2i & lt = mi ++) {if (n% i == 0) {System .out.println (n + 'není prvočíslo') flag = 1 konec}} if (flag == 0) {System.out.println (n + 'je prvočíslo')}} System.out.println ('Extending to Interface 2 ')} public static void main (String args []) {Interface2 obj = new Edureka2 () obj.prime () Interface1 obj1 = new Edureka2 () obj1.armstrong ()}}

Výstup:

3 je prvočíslo rozšiřující se na rozhraní 2 armstrong number rozšiřující se na rozhraní 1
  • Rozhraní Java vyžaduje, aby deklarované proměnné byly inicializovány v době deklarace.
  • Modifikátory přístupu pro rozhraní jsou ve výchozím nastavení nastaveny na veřejné statické a konečné. Pochopme to na příkladu

// Kód rozhraní

test balíčku veřejné rozhraní Zkuste {// public int a = 10 // public static final int a = 10 // static int a = 0 // final int a = 10 // int a = 10}
  • Všechny výše uvedené deklarace jsou pravdivé a platné uvnitř rozhraní.
  • Rozhraní Java je schopno rozšířit libovolný počet rozhraní, ale nikdy je nemůže implementovat.
  • Třída Java může implementovat libovolný počet rozhraní.
  • Třída Java nemůže implementovat rozhraní se stejným názvem metody a jiným návratovým typem.
  • Pokud existují dvě nebo více metod se stejným názvem metody, existují ve více rozhraních, stačí implementace metody jednou. Pochopme to na praktickém příkladu.

// Kód rozhraní

co je loutka v devops
balíček stejné veřejné rozhraní A {public void display ()} // balíček kódu rozhraní stejné veřejné rozhraní B {public void display ()} // balíček kódu třídy stejná třída stejná implementuje A, B {public void display () {System.out .println ('displaying data')} public static void main (String [] args) {same print = new same () print.display ()}}

Výstup:

Vítejte v Edureka E-Learning

Tím se dostáváme na konec tohoto článku. Doufám, že jste pochopili význam rozhraní, syntaxe, funkčnosti, vnoření rozhraní, klíčových bodů rozhraní Java a operací prováděných s nimi.

Nyní, když jste pochopili základy Javy, podívejte se na Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů po celém světě. Školicí a certifikační kurz Edureka Java J2EE a SOA je určen pro studenty a profesionály, kteří chtějí být vývojářem Java. Kurz je navržen tak, aby vám poskytl náskok v programování v Javě a naučil vás základní i pokročilé koncepty Javy spolu s různými rámci Java, jako je Hibernate & Jaro .

Máte na nás dotaz? Uveďte to v sekci komentářů tohoto blogu „Rozhraní Java“ a my se vám ozveme co nejdříve.