- Sąsaja
- Sąsajos pavyzdys
- Daugkartinis paveldėjimas pagal sąsają
- Kodėl sąsajoje palaikomas daugialypis paveldėjimas, o klasės atveju jis nepalaikomas.
- Žymeklio sąsaja
- Į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ą.
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.
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ą .
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.
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“.