logo

Sąsaja Java

  1. Sąsaja
  2. Sąsajos pavyzdys
  3. Daugkartinis paveldėjimas pagal sąsają
  4. Kodėl sąsajoje palaikomas daugialypis paveldėjimas, o klasės atveju jis nepalaikomas.
  5. Žymeklio sąsaja
  6. Įdėta sąsaja

An sąsaja Java yra klasės planas. Jis turi statines konstantas ir abstrakčius metodus.

„Java“ sąsaja yra mechanizmas pasiekti abstrakcija . „Java“ sąsajoje gali būti tik abstraktūs metodai, o ne metodo korpusas. Jis naudojamas abstrakcijai ir daugybei pasiekti paveldėjimas Java .

Kitaip tariant, galite sakyti, kad sąsajos gali turėti abstrakčius metodus ir kintamuosius. Jis negali turėti metodo kūno.

Java sąsaja taip pat reprezentuoja IS-A santykį .

Jo negalima sudaryti kaip abstrakčiąją klasę.

Nuo „Java 8“ galime turėti numatytieji ir statiniai metodai sąsajoje.

Nuo „Java 9“ galime turėti privačiais metodais sąsajoje.

Kodėl naudoti Java sąsają?

Iš esmės yra trys sąsajos naudojimo priežastys. Jie pateikiami žemiau.

Linux architektūra
  • Jis naudojamas abstrakcijai pasiekti.
  • Naudodami sąsają galime palaikyti daugialypio paveldėjimo funkcionalumą.
  • Jis gali būti naudojamas norint pasiekti laisvą sujungimą.
Kodėl naudoti Java sąsają

Kaip deklaruoti sąsają?

Sąsaja deklaruojama naudojant sąsajos raktinį žodį. Tai suteikia visišką abstrakciją; reiškia, kad visi sąsajos metodai deklaruojami tuščiu turiniu, o visi laukai pagal numatytuosius nustatymus yra vieši, statiniai ir galutiniai. Klasė, kuri įgyvendina sąsają, turi įgyvendinti visus sąsajoje deklaruotus metodus.

Sintaksė:

 interface { // declare constant fields // declare methods that abstract // by default. } 

Java 8 sąsajos tobulinimas

Nuo Java 8 , sąsaja gali turėti numatytuosius ir statinius metodus, kurie bus aptarti vėliau.

java kilpų tipams

Vidinis kompiliatoriaus papildymas

„Java“ kompiliatorius prideda viešuosius ir abstrakčius raktinius žodžius prieš sąsajos metodą. Be to, jis prideda viešuosius, statinius ir galutinius raktinius žodžius prieš duomenų narius.

Kitaip tariant, sąsajos laukai pagal numatytuosius nustatymus yra vieši, statiniai ir galutiniai, o metodai yra vieši ir abstraktūs.

sąsaja java

Santykis tarp klasių ir sąsajų

Kaip parodyta toliau pateiktame paveikslėlyje, klasė išplečia kitą klasę, sąsaja išplečia kitą sąsają, bet a klasė įgyvendina sąsają .

Klasės ir sąsajos santykis

Java sąsajos pavyzdys

Šiame pavyzdyje sąsaja Printable turi tik vieną metodą, o jos įgyvendinimas pateikiamas A6 klasėje.

 interface printable{ void print(); } class A6 implements printable{ public void print(){System.out.println('Hello');} public static void main(String args[]){ A6 obj = new A6(); obj.print(); } } 
Išbandykite dabar

Išvestis:

 Hello 

Java sąsajos pavyzdys: braižomas

Šiame pavyzdyje Drawable sąsaja turi tik vieną metodą. Jo įgyvendinimą užtikrina Stačiakampio ir Apskritimo klasės. Realiame scenarijuje sąsają apibrėžia kažkas kitas, tačiau ją įgyvendina skirtingi diegimo teikėjai. Be to, juo naudojasi kažkas kitas. Diegimo dalį slepia vartotojas, kuris naudoja sąsają.

Failas: TestInterface1.java

 //Interface declaration: by first user interface Drawable{ void draw(); } //Implementation: by second user class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class Circle implements Drawable{ public void draw(){System.out.println('drawing circle');} } //Using interface: by third user class TestInterface1{ public static void main(String args[]){ Drawable d=new Circle();//In real scenario, object is provided by method e.g. getDrawable() d.draw(); }} 
Išbandykite dabar

Išvestis:

 drawing circle 

Java sąsajos pavyzdys: bankas

Pažiūrėkime kitą „Java“ sąsajos pavyzdį, kuriame įdiegta banko sąsaja.

Failas: TestInterface2.java

 interface Bank{ float rateOfInterest(); } class SBI implements Bank{ public float rateOfInterest(){return 9.15f;} } class PNB implements Bank{ public float rateOfInterest(){return 9.7f;} } class TestInterface2{ public static void main(String[] args){ Bank b=new SBI(); System.out.println('ROI: '+b.rateOfInterest()); }} 
Išbandykite dabar

Išvestis:

 ROI: 9.15 

Daugkartinis „Java“ paveldėjimas pagal sąsają

Jei klasė įgyvendina kelias sąsajas arba sąsaja išplečia kelias sąsajas, tai vadinama daugialypiu paveldėjimu.

daugkartinis paveldėjimas java
 interface Printable{ void print(); } interface Showable{ void show(); } class A7 implements Printable,Showable{ public void print(){System.out.println('Hello');} public void show(){System.out.println('Welcome');} public static void main(String args[]){ A7 obj = new A7(); obj.print(); obj.show(); } } 
Išbandykite dabar
 Output:Hello Welcome 

K) Daugkartinis paveldėjimas nepalaikomas per „Java“ klasę, bet tai įmanoma naudojant sąsają, kodėl?

Kaip paaiškinome paveldėjimo skyriuje, daugkartinis paveldėjimas nepalaikomas klasė dėl neaiškumo. Tačiau ji palaikoma sąsajos atveju, nes nėra dviprasmybių. Taip yra todėl, kad jo įgyvendinimą užtikrina įgyvendinimo klasė. Pavyzdžiui:

 interface Printable{ void print(); } interface Showable{ void print(); } class TestInterface3 implements Printable, Showable{ public void print(){System.out.println('Hello');} public static void main(String args[]){ TestInterface3 obj = new TestInterface3(); obj.print(); } } 
Išbandykite dabar

Išvestis:

operacinės sistemos naudojimas
 Hello 

Kaip matote aukščiau pateiktame pavyzdyje, spausdinama ir rodoma sąsaja turi tuos pačius metodus, tačiau ją įgyvendina klasė TestTnterface1, todėl nėra dviprasmybių.


Sąsajos paveldėjimas

Klasė įgyvendina sąsają, bet viena sąsaja išplečia kitą sąsają.

 interface Printable{ void print(); } interface Showable extends Printable{ void show(); } class TestInterface4 implements Showable{ public void print(){System.out.println('Hello');} public void show(){System.out.println('Welcome');} public static void main(String args[]){ TestInterface4 obj = new TestInterface4(); obj.print(); obj.show(); } } 
Išbandykite dabar

Išvestis:

 Hello Welcome 

„Java 8“ numatytasis metodas sąsajoje

Nuo „Java 8“ sąsajoje galime turėti metodo turinį. Bet mes turime padaryti jį numatytuoju metodu. Pažiūrėkime pavyzdį:

yra modelių pavyzdžiai

Failas: TestInterfaceDefault.java

 interface Drawable{ void draw(); default void msg(){System.out.println('default method');} } class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class TestInterfaceDefault{ public static void main(String args[]){ Drawable d=new Rectangle(); d.draw(); d.msg(); }} 
Išbandykite dabar

Išvestis:

 drawing rectangle default method 

„Java 8“ statinis metodas sąsajoje

Nuo „Java 8“ sąsajoje galime turėti statinį metodą. Pažiūrėkime pavyzdį:

Failas: TestInterfaceStatic.java

 interface Drawable{ void draw(); static int cube(int x){return x*x*x;} } class Rectangle implements Drawable{ public void draw(){System.out.println('drawing rectangle');} } class TestInterfaceStatic{ public static void main(String args[]){ Drawable d=new Rectangle(); d.draw(); System.out.println(Drawable.cube(3)); }} 
Išbandykite dabar

Išvestis:

 drawing rectangle 27 

Kl.) Kas yra žymeklis arba pažymėta sąsaja?

Pavyzdžiui, sąsaja, kurioje nėra nario, yra žinoma kaip žymeklis arba pažymėta sąsaja, Serializuojama , Klonuojamas, Nuotolinis ir tt Jie naudojami tam tikrai svarbiai informacijai JVM pateikti, kad JVM galėtų atlikti naudingą operaciją.

 //How Serializable interface is written? public interface Serializable{ } 

Įdėta sąsaja Java

Pastaba: sąsaja gali turėti kitą sąsają, kuri yra žinoma kaip įdėta sąsaja. Išsamiai apie tai sužinosime įdėtos klasės skyrių. Pavyzdžiui:

 interface printable{ void print(); interface MessagePrintable{ void msg(); } } 
Daugiau apie „Nested Interface“.