Što je sučelje u Javi i kako ga implementirati?



Ovaj će vam članak pomoći u sveobuhvatnom pristupu Java sučelju i raznim vrstama primjera povezanih s njegovom funkcionalnošću.

' Sučelje je napredna razina postizanja apstrakcije u programskom jeziku Java. Java sučelje pomaže u smanjenje složenosti u kodu i pojednostavljuje čitljivost . U ovom članku objasnit ću vam Java sučelje kroz sljedeći dokument.

Što je Java sučelje?

Računalno sučelje je poznat kao granica koja razdvaja dva ili više sustava. Razmjenjuje podatke između komponenata u sustavu koji mogu signalizirati, narediti ili protokole.





java-interface

Java Abstraction pruža funkcionalnost određene metode skrivanjem logike implementacije zapisane unutar metode. Slično tome, Java sučelje je također apstraktna klasa koja uključuje Izjavu o metodi, ali ne i njezinu definiciju. Razred provodi sučelje za nasljeđivanje apstraktnih metoda. Uz apstraktne metode, an sučelje također može uključivati konstante, statičke metode, ugniježđena sučelja i zadane metode.



Sličnosti između klase i sučelja.

Sučelje je potpuno slično normalnoj klasi u Javi. Sučelje uključuje apstraktne metode i te su metode dizajnirane za primjenu. Ovaj je postupak samo jednak nasljeđivanju, što je normalno kada je riječ o nastavi. Razgovarat ćemo više o sličnostima.

  • Isto kao i klasa, sučelje također može sadržavati onoliko brojeva metoda koliko je potrebno.
  • Slično razredima, i sučelje se piše s .Java datoteka s nastavkom.
  • Iznenađujuće je da se bajtkod za sučelje pojavio u .razred datoteka.
  • Sučelje je prikazano u obliku paketa, a njihov odgovarajući bytecode nalazi se u direktoriju koji se podudara s nazivom paketa.

Zašto nam treba sučelje?

Java ne podržava Više nasljedstava, zbog čega, Neće dopustiti da se klase prošire na više klasa u jednom primjeru. Razredi za djecu nije mogao naslijediti svojstva više roditeljskih razreda u jednom primjeru, jer to rezultira Dijamantni problem. Da biste prevladali ovaj problem, Sučelje uvodi se. Razumijemo ovaj problem na primjeru.



Pretpostavimo da imamo dva aviona, jedan može nositi samo putnici, samo onaj drugi položaj. Sad moramo naslijediti svojstva i teretnog i putničkog zrakoplova. Java ne bi podržala ovo rješenje jer završi u dvosmislenost između dviju ravnina.

Ali, ako to možete učiniti čineći da Java osjeća da nasljeđuje jednu ravninu i provođenje metode prisutne u drugoj ravni. To je poput komercijalnog zrakoplova koji prima i putnike i prtljagu. Sučelje je poput izrade veće ravnine koja bi mogla obaviti oba zadatka bez ometanja međusobnih komponenata, već samo posuđivanje metoda iz Razred sučelja.

primjena analize velikih podataka

// Klasa A klase

paket više klasa A {void msg () {System.out.println ('Pozdrav')}}

// Oznaka razreda B

paket više klasa B {void msg () {System.out.println ('Dobrodošli')}}

Oznaka razreda C

paket višestruka klasa C proteže se A, B {// Java to neće prihvatiti, izbacit će pogrešku i kôd se neće izvršiti. javna statička void glavna (String args []) {C obj = new C () obj.msg ()}}

Izlaz:

Pogreška. Ovaj poseban pristup donosi iznimku. Java ne podržava više nasljeđa. Ova je pogreška poznata kao Dijamantni problem 

Isprobajmo rješenje pomoću sučelja, Dječji tečajevi može pristupiti metodama iz Višestruki roditelj klase na jednom stupnju.

// Šifra sučelja

dinamičko dodjeljivanje memorije u c ++
paket MIS rješenje javnog sučelja {public void Pozdrav () public void Dobrodošli ()}

// Šifra razreda

paket MIS javna klasa classA implementira rješenje {public void Hello () {java.lang.System.out.println ('Hello world')} public void Dobrodošli () {java.lang.System.out.println ('Dobrodošli u Edureku ')} public static void main (String [] args) {classA Edureka = new classA () Edureka.Hello () Edureka.Welcome ()}}

Izlaz:

Pozdrav svijete
Dobrodošli u Edureku

Izjava Java sučelja: Sintaksa

sučelje_ime_sučelja {// deklariraj konstantna polja // deklariraj metode () // zadane metode}

Prođimo kroz primjer Java sučelja

Primjer Java sučelja

Stvorimo jednostavan kalkulator zasnovan na Java sučelju.

// Šifra sučelja

osnovni postupci paketa matematika javnog sučelja {public void add () public void sub () public void mul () public void div ()}

// Šifra razreda

paket basicoperations import java.util.Scanner javna klasa student1 implementira matematiku {@Override public void add () {Scanner kb = new Scanner (System.in) System.out.println ('Unesite bilo koje dvije cjelobrojne vrijednosti za izvršavanje zbrajanja') a = kb.nextInt () int b = kb.nextInt () int s = a + b System.out.println ('Zbroj' + a + 'i' + b + 'je' + s)} @Preuzmi javni void sub () {Skener kb = novi Skener (System.in) System.out.println ('Unesite bilo koje dvije cjelobrojne vrijednosti da biste izvršili oduzimanje') int a = kb.nextInt () int b = kb.nextInt () int s = ab System.out.println ('Razlika od' + a + 'i' + b + 'je' + s)} @Preuzmi javni void mul () {Scanner kb = novi Scanner (System.in) System.out.println ('Enter bilo koje dvije cjelobrojne vrijednosti množenja ') int a = kb.nextInt () int b = kb.nextInt () int s = a * b System.out.println (' Proizvod '+ a +' i '+ b +' je '+ s)} @Override public void div () {Skener kb = novi skener (System.in) System.out.println ('Unesite bilo koje dvije cjelovite podjele vrijednosti') int a = kb.nextInt () int b = kb.nextInt () int s = a / b System.out.p rintln ('Kvocijent od' + a + 'i' + b + 'je' + s)} javna statička praznina main (String [] args) {student1 Edureka1 = novi student1 () Edureka1.add () Edureka1.sub () Edureka1. mul () Edureka1.div ()}}

Izlaz:

Napredujući, naučit ćemo ugnijezditi Java sučelje.

Gniježđenje Java sučelja

Gniježđenje sučelja je postupak deklariranja sučelja unutar drugog Postojeće sučelje ili deklariranje sučelja unutar a Razred. Ugniježđeno sučelje poznato je i kao Unutarnje sučelje.

Gniježđenom sučelju nije moguće pristupiti direktno . Stoga se gniježđenje provodi kako bi se razriješili Prostori imena grupirajući ih s njima povezanima Sučelja i Nastava. Ovim postupkom,možemo nazvati Ugniježđeno sučelje kroz Vanjska klasa ili Vanjsko sučelje ime iza kojeg slijedi a točka (.) , i Naziv sučelja.

Pokušajmo s nekoliko primjera temeljenih na Gniježđenje sučelja. Prvo, pokušajmo ugnijezditi a Java sučelje unutar drugog Java sučelje kao što je prikazano niže:

// Šifra sučelja

paket Nest javno sučelje OuterInterface {void display () sučelje InnerInterface {void InnerMethod ()}}

// Šifra razreda

paket Nest klasa NestedInterfaceDemo implementira 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 ')} javna statička void glavna (String args []) {OuterInterface.InnerInterface obj = new NestedInterfaceDemo () obj.InnerMethod ()}}

Izlaz:

Prvih 10 pojmova: 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + Ispis iz gniježđene metode InnerInterface ...!

Pokušajmo sada ugnijezditi a Java sučelje unutar a Razred Java.

// Šifra sučelja

paket Nest2 javna klasa EdurekaClass {sučelje EdurekaInterface {void NestedMethod ()}}

// Šifra razreda

paket Nest2 klase NestedInterfaceDemo2 implementira EdurekaClass.EdurekaInterface {public void NestedMethod () {String input = 'Edureka' byte [] strAsByteArray = input.getBytes () bajt [] rezultat = novi bajt [strAsByteArray.length] iBytr lt.str. .length i ++) rezultat [i] = strAsByteArray [strAsByteArray.length-i-1] System.out.println (novi String (rezultat))} public static void main (String args []) {EdurekaClass.EdurekaInterface obj = new NestedInterfaceDemo2 () obj.NestedMethod ()}}

Izlaz:

akerudE

Iako sučelje izgleda gotovo slično klasi, postoje neke razlike među njima, razgovarajmo o njihovim razlikama.

Razlika između Java klase i Java sučelja

SUČELJE RAZRED
Podržava višestruko nasljeđivanje Ne podržava višestruko nasljeđivanje
Nema članove podataka Uključuje članove podataka
Nema konstruktore Uključuje konstruktore
Uključuje nepotpune članove (član s potpisom) Uključuje i potpune (sažetak) i nepotpune članove
Nema Modifikatore pristupa Uključuje modifikatore pristupa
Sučelje nema statičke članove Razred ima sve članove kao statične

Prednosti i nedostaci Java sučelja

Prednosti:

  • Podržava Java sučelje Višestruko nasljeđivanje.
  • Java sučelje omogućuje programerima razbijanje složenih programskih pristupa i pojednostavljivanje ovisnosti između predmeta.
  • Java sučelje čini članovi podataka i metode u aplikaciji koja će biti labavo spojena.

Mane:

  • Korištenje Java sučelja sruši brzina izvršenja prijave.
  • Java sučelja u aplikaciji ili se više puta koriste ili se gotovo uopće ne koriste.

Ključne točke na Java sučelju

  • Nijedna metoda deklarirana u sučelju nema tijelo koje omogućuje potpunu apstrakciju.
  • Nije moguće stvoriti objekt sučelja. Stoga instantacija sučelja nije moguća.
  • Klasa može implementirati sučelje pomoću ključne riječi implementira. Pogledajmo to na primjeru.

// Šifra sučelja

paket extInterface javno sučelje extInterface {javna void metoda1 () javna void metoda2 ()}

// Šifra razreda

paket extInterface uvoz java.util.Scanner klasa Edureka implementira extInterface {public void method1 () {System.out.println ('implementacija method1') Scanner scanner = new Scanner (System.in) System.out.println ('Unesite broj za pronalaženje kvadratnog korijena u Javi: ') double square = scanner.nextDouble () double squareRoot = Math.sqrt (square) System.out.printf (' Kvadratni korijen broja:% f je:% f% n ', kvadrat, squareRoot)} public void method2 () {System.out.println ('implementacija method2')} public static void main (String arg []) {extInterface obj = new Edureka () obj.method1 ()}}

Izlaz:

implementacija metode1 Unesite broj za pronalaženje kvadratnog korijena u Javi: 16 Kvadratni korijen broja: 16.0 je: 4.0
  • Klasa može implementirati više nasljeđa u jednom primjerku. Razumijemo to kroz sljedeći kod.

// Kôd sučelja 1

paket ExtendInt javno sučelje Interface1 {public void armstrong ()}

// Kôd sučelja 2

paket ExtendInt javno sučelje Interface2 {public void prime ()} // Class Code paket ExtendInt javna klasa Edureka2 implementira 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 ('armstrong broj') else System.out.println ('Nije armstrong broj') System.out.println ('Proširenje na sučelje 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 + 'nije prost broj')} else {for (i = 2i & lt = mi ++) {if (n% i == 0) {System .out.println (n + 'nije prost broj') flag = 1 break}} if (flag == 0) {System.out.println (n + 'je prost broj')}} System.out.println ('Extending na Sučelje 2 ')} javna statička void glavna (String args []) {Interface2 obj = new Edureka2 () obj.prime () Interface1 obj1 = new Edureka2 () obj1.armstrong ()}}

Izlaz:

3 je prost broj koji se proteže do sučelja 2 armstrong broj koji se proteže do sučelja 1
  • Java sučelje zahtijeva da se deklarirane varijable inicijaliziraju u vrijeme deklaracije.
  • Modifikatori pristupa za sučelje su prema zadanim postavkama postavljeni na javne statičke i konačne. Shvatimo to na primjeru

// Šifra sučelja

Vodiči za Microsoft SQL Server za početnike
test paketa javno sučelje Pokušajte {// javni int a = 10 // javni statički završni int a = 10 // statički int a = 0 // konačni int a = 10 // int a = 10}
  • Sve gore navedene izjave su istinite i valjane unutar sučelja.
  • Java sučelje može proširiti bilo koji broj sučelja, ali ga nikada ne može implementirati.
  • Java klasa može implementirati bilo koji broj sučelja.
  • Java klasa ne može implementirati sučelja s istim imenom metode i različitim tipom povratka.
  • Ako postoje dvije ili više metoda s istim imenom metode, postoje li u više sučelja, tada je dovoljno implementirati metodu jednom. Razumijemo to na praktičnom primjeru.

// Šifra sučelja

paket istog javnog sučelja A {public void display ()} // Kôd sučelja paket istog javnog sučelja B {public void display ()} // Class Code paket iste klase iste implementacije A, B {public void display () {System.out .println ('prikaz podataka')} public static void main (String [] args) {isti ispis = novi isti () print.display ()}}

Izlaz:

Dobrodošli u Edureka e-učenje

Ovime smo došli do kraja ovog članka. Nadam se da ste shvatili važnost sučelja, sintakse, funkcionalnosti, gniježđenja sučelja, ključnih točaka Java sučelja i operacija izvedenih pomoću njih.

Sad kad ste razumjeli osnove Jave, pogledajte Edureka, pouzdane tvrtke za internetsko učenje s mrežom od više od 250 000 zadovoljnih učenika raširenih širom svijeta. Edurekin tečaj za obuku i certificiranje Java J2EE i SOA dizajniran je za studente i profesionalce koji žele biti programer Java. Tečaj je dizajniran da vam pruži početnu prednost u Java programiranju i osposobi vas za osnovne i napredne Java koncepte, zajedno s raznim Java okvirima poput Hibernate & Proljeće .

Imate pitanje za nas? Spomenite to u odjeljku za komentare na ovom blogu 'Java Interface' i javit ćemo vam se što je prije moguće.