Kas yra „Java“ sąsaja ir kaip ją įgyvendinti?



Šis straipsnis padės jums išsamiai suprasti „Java“ sąsają ir įvairius pavyzdžius, susijusius su jos funkcionalumu.

' Sąsaja yra aukštesnis lygis norint pasiekti abstraktumą „Java“ programavimo kalboje. Java sąsaja padeda sudėtingumo sumažinimas kode ir supaprastina įskaitomumas . Šiame straipsnyje aš paaiškinsiu jums „Java“ sąsają per šį lizdą.

Kas yra „Java“ sąsaja?

Kompiuterio sąsaja yra žinoma kaip riba, skirianti dvi ar daugiau sistemų. Jis keičiasi duomenimis tarp sistemos komponentų, kurie galėtų signalizuoti, komandomis ar protokolais.





java-interface

„Java Abstraction“ suteikia konkretaus metodo funkcionalumą, paslėpdama metodo viduje parašytą įgyvendinimo logiką. Panašiai „Java“ sąsaja taip pat yra abstrakti klasė, į kurią įeina „Metodo deklaracija“, bet ne jos apibrėžimas. Klasė padargai sąsaja paveldėti abstrakčius metodus. Kartu su abstrakčiais metodais, sąsaja taip pat gali apimti konstantos, statiniai metodai, įdėtos sąsajos ir numatytieji metodai.



Klasės ir sąsajos panašumai.

c ++ skambutis pagal nuorodą

Sąsaja yra visiškai panaši į įprastą „Java“ klasę. Sąsajoje yra abstraktūs metodai ir šie metodai yra skirti įgyvendinti. Šis procesas yra tik lygus paveldėjimui, o tai yra normalu kalbant apie klases. Aptarsime daugiau apie panašumus.

  • Kaip ir klasėje, sąsajoje taip pat gali būti tiek metodų, kiek reikia.
  • Panašiai kaip klasėse, sąsaja taip pat rašoma su a .java plėtinio failas.
  • Keista, bet sąsajos baitkodas bus rodomas .klasė failą.
  • Sąsaja rodoma paketo pavidalu, o jų atitinkamas baitų kodas yra kataloge, kuris atitinka paketo pavadinimą.

Kodėl mums reikalinga sąsaja?

„Java“ nepalaiko Keli paveldėjimai, dėl to, Tai neleis klasėms išplėsti daugiau nei vieną egzemplioriaus klasę. Vaikų klasės negalėjo paveldėti kelios tėvų klasės vienu atveju, nes taip gaunama Deimanto problema. Norėdami išspręsti šią problemą, Sąsaja yra įvestas. Supraskime šią problemą pateikdami pavyzdį.



Tarkime, kad turime du lėktuvus, vienas gali gabenti tik keleiviai, tik kitas poziciją. Dabar mums reikia paveldėti tiek krovininio, tiek keleivinio lėktuvo savybės. „Java“ nepalaikys šio sprendimo, nes jis patenka į dviprasmybė tarp dviejų lėktuvų.

Bet jei galite tai padaryti leisdami „Java“ pajusti, kad ji paveldi vieną plokštumą ir įgyvendinant metodai, esantys kitoje plokštumoje. Tai panašu į komercinį lėktuvą, kuris gabena ir keleivius, ir krovininį bagažą. Sąsaja yra tarsi padaryti didesnę plokštumą, kuri galėtų atlikti abi užduotis, netrukdydama vienas kito komponentams, o tiesiog pasiskolindama metodus iš Sąsajos klasė.

// A klasės kodas

paketas kelių A klasės {void msg () {System.out.println ('Labas')}}

// B klasės kodas

paketas kelių B klasės {void msg () {System.out.println ('Welcome')}}

C klasės kodas

paketas kelis C klases pratęsia A, B {// „Java“ to nepriims, tai sukels klaidą ir kodas nebus vykdomas. public static void main (String args []) {C obj = new C () obj.msg ()}}

Išvestis:

Klaida. Šis konkretus metodas yra išimtis. „Java“ nepalaiko kelių paveldėjimų. Ši klaida vadinama Deimanto problema 

Išbandykime sprendimą naudodami sąsają, Vaikų klasės galite pasiekti metodus iš Daugkartinis tėvas klases vienoje instancijoje.

// Sąsajos kodas

paketo MIS viešosios sąsajos sprendimas {public void Hello () public void Welcome ()}

// Klasės kodas

paketas MIS public class classA įgyvendina sprendimą {public void Hello () {java.lang.System.out.println ('Hello world')} public void Welcome () {java.lang.System.out.println ('Sveiki atvykę į „Edureka“ ')} public static void main (String [] args) {classA Edureka = new classA () Edureka.Hello () Edureka.Welcome ()}}

Išvestis:

Labas pasauli
Sveiki atvykę į „Edureka“

„Java“ sąsajos deklaravimas: sintaksė

sąsajos sąsajos_pavadinimas {// deklaruoti pastovius laukus // deklaruoti metodus () // numatytieji metodai}

Panagrinėkime „Java“ sąsajos pavyzdį

„Java“ sąsajos pavyzdys

Sukurkime paprastą skaičiuoklę, pagrįstą „Java“ sąsaja.

// Sąsajos kodas

paketo pagrindinės operacijos viešoji sąsaja matematika {public void add () public void sub () public void mul () public void div ()}

// Klasės kodas

paketo „basicoperations“ importas java.util.Scanner public class student1 vykdo matematiką {@Override public void add () {Scanner kb = new Scanner (System.in) System.out.println ('Įveskite bet kurias dvi sveiko skaičiaus reikšmes, kad atliktumėte papildymą') int a = kb.nextInt () int b = kb.nextInt () int s = a + b System.out.println ('' + a + 'ir' + b + 'suma yra' + s)} @Paisyti public void sub () {Skaitytuvas kb = naujas skaitytuvas (System.in) System.out.println ('Įveskite bet kurias dvi sveiko skaičiaus reikšmes, kad atliktumėte subtrakciją') int a = kb.nextInt () int b = kb.nextInt () int s = ab System.out.println ('' + a + 'ir' + b + 'skirtumas yra' + s)} @Paisyti viešą nieką mul () {Scanner kb = new Scanner (System.in) System.out.println ('Enter bet kurių dviejų sveikųjų skaičių reikšmių padauginimas ') int a = kb.nextInt () int b = kb.nextInt () int s = a * b System.out.println (' + a + 'ir' + b + 'produktas yra' + s)} @Paisyti viešą nieką div () {Skaitytuvas kb = naujas Skaitytuvas (System.in) System.out.println ('Įveskite bet kurį dviejų skaičių skaičių dalijimą') int a = kb.nextInt () int b = kb.nextInt () int s = a / b sistema.out.p rintln ('' + a + 'ir' + b + 'koeficientas yra' + s)} public static void main (String [] args) {student1 Edureka1 = new student1 () Edureka1.add () Edureka1.sub () Edureka1. mul () Edureka1.div ()}}

Išvestis:

Žengdami toliau, išmoksime įdėti „Java“ sąsają.

„Java“ sąsajos įdėjimas

Sąsajos lizdas yra sąsajos deklaravimo viduje procesas Esama sąsaja arba sąsajos deklaravimas a viduje Klasė. Įdėta sąsaja taip pat žinoma kaip Vidinė sąsaja.

Įterptosios sąsajos negalima pasiekti tiesiogiai . Taigi, „Nesting“ yra įgyvendinamas siekiant išspręsti vardų sritis, sugrupuojant jas į susijusias Sąsajos ir Užsiėmimai. Pagal šią procedūrągalime paskambinti Įterptoji sąsaja pro Išorinė klasė arba Išorinė sąsaja pavadinimas, po kurio rašoma a taškas (.) ir Sąsajos pavadinimas.

Išbandykime keletą pavyzdžių, pagrįstų Sąsajos lizdas. Pirmiausia pabandykime lizdą a „Java“ sąsaja kito viduje „Java“ sąsaja kaip parodyta žemiau:

// Sąsajos kodas

„Pack Nest“ viešoji sąsaja „OuterInterface“ {void display () sąsaja „InnerInterface“ {void InnerMethod ()}}

// Klasės kodas

paketas „Nest“ klasė „NestedInterfaceDemo“ įgyvendina „OuterInterface.InnerInterface“ {public void InnerMethod () {int n = 10, t1 = 0, t2 = 1 System.out.print ('Pirmieji' + n + 'terminai:') už (int i = 1 i & lt = n ++ i) {System.out.print (t1 + '+') int suma = t1 + t2 t1 = t2 t2 = suma} System.out.println ('nSpausdinimas naudojant „Nested InnerInterface“ metodą ...! n ')} public static void main (String args []) {OuterInterface.InnerInterface obj = new NestedInterfaceDemo () obj.InnerMethod ()}}

Išvestis:

Pirmieji 10 terminų: 0 + 1 + 1 + 2 + 3 + 5 + 8 + 13 + 21 + 34 + Spausdinimas naudojant „Nested InnerInterface“ metodą ...!

Dabar pabandykime įdėti lizdą „Java“ sąsaja viduje a „Java“ klasė.

// Sąsajos kodas

paketas „Nest2“ viešoji klasė „EdurekaClass“ {sąsaja „EdurekaInterface“ {void NestedMethod ()}}

// Klasės kodas

paketas „Nest2“ klasė „NestedInterfaceDemo2“ įgyvendina „EdurekaClass.EdurekaInterface“ {public void NestedMethod () {String input = 'Edureka' baitas [] strAsByteArray = input.getBytes () baitas [] rezultatas = naujas baitas [strAsByteArray.lengthByte] už [int iA 0 i .length i ++) rezultatas [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 ()}}

Išvestis:

akerudE

Nors sąsaja atrodo beveik panaši į klasę, tarp jų yra keletas skirtumų. Aptarkime jų skirtumus.

Skirtumas tarp „Java“ klasės ir „Java“ sąsajos

SĄSAJA KLASĖ
Palaiko daugkartinį paveldėjimą Nepalaiko daugybinio paveldėjimo
Neturi duomenų narių Apima duomenų narius
Neturi konstruktorių Apima konstruktorius
Apima nebaigtus narius (parašą pasirašęs narys) Apima ir užbaigtus (santraukos), ir nebaigtus narius
Neturi prieigos modifikatorių Apima prieigos modifikatorius
Sąsajoje nėra statinių narių Klasėje visi nariai yra statiniai

„Java“ sąsajos privalumai ir trūkumai

Privalumai:

  • „Java“ sąsaja palaiko Daugkartinis paveldėjimas.
  • Java sąsaja leidžia programuotojams suskaidyti sudėtingus programavimo metodus ir supaprastinti priklausomybės tarp objektų.
  • „Java“ sąsaja sukuria duomenų nariai ir metodai programoje, kad būtų laisvai susieta.

Trūkumai:

  • 'Java' sąsajos naudojimas sumažina vykdymo greitis paraiškos.
  • „Java“ sąsajos programoje yra naudojamos pakartotinai arba beveik nenaudojamos.

Pagrindiniai „Java“ sąsajos taškai

  • Nė viename iš sąsajoje deklaruotų metodų nėra kūno, leidžiančio užtikrinti visišką abstrakciją.
  • Neįmanoma sukurti sąsajos objekto. Vadinasi, sąsajos iš karto sukurti neįmanoma.
  • Klasė gali įdiegti sąsają naudodama raktinių žodžių įrankius. Pažiūrėkime tai per pavyzdį.

// Sąsajos kodas

paketas extInterface viešoji sąsaja extInterface {public void metodas1 () public void metodas2 ()}

// Klasės kodas

paketo extInterface importavimas java.util.Scanner klasė „Edureka“ įgyvendina extInterface {public void method1 () {System.out.println ('method1 įgyvendinimas') Skaitytuvo skaitytuvas = naujas Skaitytuvas (System.in) System.out.println ('Įveskite numerį rasti „Java“ kvadratinę šaknį: ') double square = scanner.nextDouble () double squareRoot = Math.sqrt (square) System.out.printf (' Skaičiaus kvadratinė šaknis:% f yra:% f% n ', kvadratas, squareRoot)} public void method2 () {System.out.println ('2 metodo įgyvendinimas ')} public static void main (String arg []) {extInterface obj = new Edureka () obj.method1 ()}}

Išvestis:

1 metodo įgyvendinimas Įveskite skaičių, kad rastumėte kvadratinę šaknį „Java“: 16 Skaičiaus kvadratinė šaknis: 16.0 yra: 4,0
  • Klasė gali įgyvendinti kelis paveldėjimus vienoje instancijoje. Supraskime tai naudodami šį kodą.

// 1 sąsajos kodas

giliai vs sekli kopija java
paketas „ExtendInt“ viešosios sąsajos sąsaja1 {public void armstrong ()}

// 2 sąsajos kodas

paketas „ExtendInt public interface“ sąsaja2 {public void prime ()} // „Class Code“ paketas „ExtendInt public class“ „Edureka2“ įgyvendina „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 number') else System.out.println ('Neapsaugotas skaičius') System.out.println ('Išplečiama į 1 sąsają')} public void prime () {int i, m = 0, flag = 0 int n = 3 // įvestis m = n / 2, jei (n == 0 || n == 1) {System.out.println (n + 'nėra pirminis skaičius')} else {for (i = 2i & lt = mi ++) {if (n% i == 0) {Sistema .out.println (n + 'nėra pirminis skaičius') flag = 1 break}} if (flag == 0) {System.out.println (n + 'is prime number')}} System.out.println ('Išplečiama prie 2 sąsajos ')} public static void main (String args []) {Interface2 obj = new Edureka2 () obj.prime () Interface1 obj1 = new Edureka2 () obj1.armstrong ()}}

Išvestis:

3 yra pirminis skaičius, pratęsiantis 2 sąsają, armstrong numeris, pratęsiantis 1 sąsają
  • „Java“ sąsaja reikalauja, kad deklaruojami kintamieji būtų inicializuoti deklaravimo metu.
  • Pagal numatytuosius nustatymus sąsajos prieigos modifikatoriai yra nustatyti kaip statiniai ir galutinis. Supraskime tai pavyzdžiu

// Sąsajos kodas

paketo bandymas viešoji sąsaja Pabandykite {// public int a = 10 // public static final int a = 10 // static int a = 0 // final int a = 10 // int a = 10}
  • Visos pirmiau pateiktos deklaracijos yra teisingos ir galioja sąsajoje.
  • „Java“ sąsaja gali išplėsti bet kokį sąsajų skaičių, tačiau niekada negali jos įdiegti.
  • „Java“ klasėje galima įdiegti bet kokį sąsajų skaičių.
  • „Java Class“ negali įdiegti sąsajų su tuo pačiu metodo pavadinimu ir skirtingu grąžinimo tipu.
  • Jei yra du ar daugiau metodų su tuo pačiu metodo pavadinimu, yra keliose sąsajose, pakanka metodo įdiegti vieną kartą. Supraskime tai su praktiniu pavyzdžiu.

// Sąsajos kodas

paketas ta pati viešoji sąsaja A {public void display ()} // Sąsajos kodo paketas ta pati viešoji sąsaja B {public void display ()} // Klasės kodo paketas tos pačios klasės tos pačios priemonės A, B {public void display () {System.out .println ('rodyti duomenis')} public static void main (String [] args) {same print = new same () print.display ()}}

Išvestis:

Sveiki atvykę į „Edureka“ el. Mokymąsi

Tuo mes baigėme šį straipsnį. Tikiuosi, kad supratote sąsajos, sintaksės, funkcionalumo, sąsajos lizdo, pagrindinių „Java“ sąsajos taškų ir jais atliekamų operacijų svarbą.

Dabar, kai supratote „Java“ pagrindus, patikrinkite sukūrė „Edureka“ - patikima internetinė mokymosi įmonė, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą. „Edureka“ mokymai ir sertifikavimo kursai „Java J2EE“ ir „SOA“ skirti studentams ir specialistams, norintiems būti „Java“ kūrėjais. Kursas sukurtas tam, kad galėtumėte pradėti žvalgytis į „Java“ programavimą ir išmokyti pagrindines ir pažangias „Java“ koncepcijas kartu su įvairiomis „Java“ sistemomis, tokiomis kaip „Hibernate“ ir Pavasaris .

Turite mums klausimą? Paminėkite tai šio „Java“ sąsajos tinklaraščio komentarų skyriuje ir mes kuo greičiau susisieksime su jumis.