logo

Interfész Java nyelven

  1. Felület
  2. Példa interfészre
  3. Többszörös öröklés interfészen keresztül
  4. Miért támogatja a többszörös öröklődést az interfész, míg az osztály esetében nem.
  5. Marker interfész
  6. Beágyazott felület

An interfész Java nyelven egy osztály tervrajza. Statikus állandókkal és absztrakt módszerekkel rendelkezik.

java listbox

A Java felülete az eléréséhez szükséges mechanizmus absztrakció . A Java felületen csak absztrakt metódusok lehetnek, a metódustörzs nem. Absztrakció és többszörös elérésére használják öröklődés Java nyelven .

Más szóval azt mondhatjuk, hogy az interfészeknek lehetnek elvont metódusai és változói. Nem lehet módszerteste.

Java interfész is az IS-A kapcsolatot képviseli .

Nem lehet úgy példányosítani, mint az absztrakt osztály.

A Java 8 óta rendelkezhetünk alapértelmezett és statikus módszerek egy felületen.

A Java 9 óta rendelkezhetünk privát módszerek egy felületen.

Miért érdemes Java interfészt használni?

Főleg három oka van az interfész használatának. Az alábbiakban közöljük őket.

  • Absztrakció elérésére használják.
  • Interfészen keresztül támogatni tudjuk a többszörös öröklődés funkcionalitását.
  • Használható laza csatolás elérésére.
Miért érdemes Java interfészt használni?

Hogyan deklaráljunk interfészt?

Egy interfész deklarálása az interfész kulcsszó használatával történik. Teljes absztrakciót biztosít; azt jelenti, hogy az interfész összes metódusa üres törzstel van deklarálva, és alapértelmezés szerint minden mező nyilvános, statikus és végleges. Az interfészt megvalósító osztálynak meg kell valósítania az interfészben deklarált összes metódust.

Szintaxis:

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

Java 8 interfész javítása

Mivel Java 8 , az interfésznek lehetnek alapértelmezett és statikus metódusai, amelyekről később lesz szó.

Belső kiegészítés a fordító által

A Java fordító nyilvános és absztrakt kulcsszavakat ad hozzá az interfész metódus előtt. Ezenkívül nyilvános, statikus és végső kulcsszavakat ad hozzá az adattagok elé.

Más szavakkal, az Interface mezők alapértelmezés szerint nyilvánosak, statikusak és véglegesek, a metódusok pedig nyilvánosak és absztraktak.

interfész java-ban

Az osztályok és az interfészek közötti kapcsolat

Ahogy az alábbi ábrán látható, egy osztály kiterjeszt egy másik osztályt, egy interfész egy másik interfészt, de a osztály interfészt valósít meg .

Az osztály és az interfész kapcsolata

Java interfész példa

Ebben a példában a Nyomtatható felületnek csak egy metódusa van, és ennek megvalósítása az A6 osztályban található.

 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(); } } 
Tesztelje most

Kimenet:

 Hello 

Java interfész példa: Rajzolható

Ebben a példában a Rajzolható felületnek csak egy metódusa van. Megvalósítását a Rectangle és Circle osztályok biztosítják. Valós forgatókönyvben egy interfészt valaki más definiál, de megvalósítását különböző implementációs szolgáltatók biztosítják. Ráadásul más is használja. A megvalósítási részt a felületet használó felhasználó elrejti.

10 a 100-ból

Fájl: 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(); }} 
Tesztelje most

Kimenet:

 drawing circle 

Java interfész példa: Bank

Lássunk egy másik példát a java felületre, amely a Bank interfész megvalósítását biztosítja.

Fájl: 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()); }} 
Tesztelje most

Kimenet:

 ROI: 9.15 

Többszörös öröklődés Java-ban interfészen keresztül

Ha egy osztály több interfészt valósít meg, vagy egy interfész több interfészt is kiterjeszt, azt többszörös öröklődésnek nevezzük.

többszörös öröklődés a java-ban
 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(); } } 
Tesztelje most
 Output:Hello Welcome 

K) A többszörös öröklődés nem támogatott osztályon keresztül a java-ban, de interfészen keresztül lehetséges, miért?

Amint azt az öröklődés fejezetben kifejtettük, a többszörös öröklődés nem támogatott esetén osztály a kétértelműség miatt. Azonban interfész esetén támogatott, mert nincs kétértelműség. Ennek az az oka, hogy megvalósítását az implementációs osztály biztosítja. Például:

 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(); } } 
Tesztelje most

Kimenet:

 Hello 

Amint az a fenti példában látható, a nyomtatható és megjeleníthető felület ugyanazokkal a metódusokkal rendelkezik, de megvalósítását a TestTnterface1 osztály biztosítja, így nincs kétértelműség.

hálózati topológia

Interfész öröklődése

Egy osztály megvalósít egy interfészt, de az egyik interfész kiterjeszt egy másik interfészt.

 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(); } } 
Tesztelje most

Kimenet:

 Hello Welcome 

Java 8 alapértelmezett módszere az interfészben

A Java 8 óta lehet metódustörzs a felületen. De alapértelmezett módszerré kell tennünk. Lássunk egy példát:

Fájl: 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(); }} 
Tesztelje most

Kimenet:

 drawing rectangle default method 

Java 8 statikus módszer az interfészben

A Java 8 óta használhatunk statikus metódust az interfészben. Lássunk egy példát:

Fájl: 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)); }} 
Tesztelje most

Kimenet:

 drawing rectangle 27 

K) Mi az a marker vagy címkézett felület?

Az olyan interfészt, amelynek nincs tagja, jelölőnek vagy címkézett interfésznek nevezzük, például, Sorozatozható , klónozható, távoli stb. Arra szolgálnak, hogy néhány lényeges információt biztosítsanak a JVM számára, hogy a JVM hasznos műveleteket hajthasson végre.

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

Beágyazott felület Java nyelven

Megjegyzés: Egy interfésznek lehet egy másik interfésze, amely beágyazott interfészként ismert. Részletesen megtanuljuk a beágyazott osztályok fejezet. Például:

 interface printable{ void print(); interface MessagePrintable{ void msg(); } } 
További információ a Nested Interface-ről