logo

Rozhranie v jazyku Java

  1. Rozhranie
  2. Príklad rozhrania
  3. Viacnásobné dedičstvo podľa rozhrania
  4. Prečo je v rozhraní podporované viacnásobné dedičstvo, zatiaľ čo nie je podporované v prípade triedy.
  5. Rozhranie značky
  6. Vnorené rozhranie

An rozhranie v jazyku Java je plánom triedy. Má statické konštanty a abstraktné metódy.

Rozhranie v jazyku Java je mechanizmus na dosiahnutie abstrakcie . V rozhraní Java môžu byť iba abstraktné metódy, nie telo metódy. Používa sa na dosiahnutie abstrakcie a viacnásobnosti dedičnosť v Jave .

Inými slovami, môžete povedať, že rozhrania môžu mať abstraktné metódy a premenné. Nemôže mať telo metódy.

Rozhranie Java tiež predstavuje vzťah IS-A .

filmová herečka kajal

Nemožno vytvoriť inštanciu rovnako ako abstraktná trieda.

Od Java 8 môžeme mať predvolené a statické metódy v rozhraní.

Od Java 9 môžeme mať súkromné ​​metódy v rozhraní.

Prečo používať rozhranie Java?

Existujú hlavne tri dôvody, prečo používať rozhranie. Sú uvedené nižšie.

  • Používa sa na dosiahnutie abstrakcie.
  • Prostredníctvom rozhrania môžeme podporovať funkčnosť viacnásobného dedenia.
  • Môže sa použiť na dosiahnutie voľného spojenia.
Prečo používať rozhranie Java

Ako deklarovať rozhranie?

Rozhranie je deklarované pomocou kľúčového slova interface. Poskytuje úplnú abstrakciu; znamená, že všetky metódy v rozhraní sú deklarované s prázdnym telom a všetky polia sú štandardne verejné, statické a konečné. Trieda, ktorá implementuje rozhranie, musí implementovať všetky metódy deklarované v rozhraní.

Syntax:

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

Vylepšenie rozhrania Java 8

Od r Java 8 , rozhranie môže mať predvolené a statické metódy, o ktorých sa bude hovoriť neskôr.

Interné pridanie kompilátorom

Kompilátor Java pridáva verejné a abstraktné kľúčové slová pred metódu rozhrania. Okrem toho pridáva verejné, statické a konečné kľúčové slová pred dátovými členmi.

Inými slovami, polia rozhrania sú štandardne verejné, statické a konečné a metódy sú verejné a abstraktné.

rozhranie v jazyku Java

Vzťah medzi triedami a rozhraniami

Ako je znázornené na obrázku nižšie, trieda rozširuje ďalšiu triedu, rozhranie rozširuje ďalšie rozhranie, ale a trieda implementuje rozhranie .

Vzťah medzi triedou a rozhraním

Príklad rozhrania Java

V tomto príklade má rozhranie Printable iba jednu metódu a jej implementácia je poskytovaná v triede A6.

 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(); } } 
Vyskúšajte to

Výkon:

 Hello 

Príklad rozhrania Java: Drawable

V tomto príklade má rozhranie Drawable iba jednu metódu. Jeho implementáciu zabezpečujú triedy Rectangle a Circle. V reálnom scenári je rozhranie definované niekým iným, ale jeho implementáciu zabezpečujú rôzni poskytovatelia implementácie. Navyše ho používa niekto iný. Implementačná časť je skrytá používateľom, ktorý používa rozhranie.

Súbor: 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(); }} 
Vyskúšajte to

Výkon:

 drawing circle 

Príklad rozhrania Java: Banka

Pozrime sa na ďalší príklad java rozhrania, ktoré poskytuje implementáciu bankového rozhrania.

Súbor: 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()); }} 
Vyskúšajte to

Výkon:

 ROI: 9.15 

Viacnásobné dedičstvo v jazyku Java podľa rozhrania

Ak trieda implementuje viacero rozhraní alebo rozhranie rozširuje viacero rozhraní, nazýva sa to viacnásobná dedičnosť.

viacnásobné dedičstvo v jave
 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(); } } 
Vyskúšajte to
 Output:Hello Welcome 

Otázka: Viacnásobné dedičstvo nie je podporované prostredníctvom triedy v jazyku Java, ale je možné pomocou rozhrania, prečo?

Ako sme vysvetlili v kapitole o dedičstve, viacnásobné dedičstvo nie je podporované v prípade trieda kvôli nejednoznačnosti. Je však podporovaný v prípade rozhrania, pretože neexistuje žiadna nejednoznačnosť. Je to preto, že jeho implementáciu zabezpečuje implementačná trieda. Napríklad:

 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(); } } 
Vyskúšajte to

Výkon:

 Hello 

Ako môžete vidieť vo vyššie uvedenom príklade, rozhranie Printable a Showable má rovnaké metódy, ale jeho implementáciu poskytuje trieda TestTnterface1, takže neexistujú žiadne nejasnosti.


Dedičnosť rozhrania

Trieda implementuje rozhranie, ale jedno rozhranie rozširuje ďalšie rozhranie.

 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(); } } 
Vyskúšajte to

Výkon:

 Hello Welcome 

Predvolená metóda Java 8 v rozhraní

Od Java 8 môžeme mať telo metódy v rozhraní. Musíme to však nastaviť ako predvolenú metódu. Pozrime sa na príklad:

Súbor: 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(); }} 
Vyskúšajte to

Výkon:

 drawing rectangle default method 

Statická metóda Java 8 v rozhraní

Od Java 8 môžeme mať v rozhraní statickú metódu. Pozrime sa na príklad:

Súbor: 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)); }} 
Vyskúšajte to

Výkon:

 drawing rectangle 27 

Q) Čo je značkovacie alebo značkované rozhranie?

Rozhranie, ktoré nemá žiadneho člena, je známe ako marker alebo tagované rozhranie, napr. Serializovateľné , Cloneable, Remote, atď. Používajú sa na poskytovanie niektorých základných informácií JVM, aby JVM mohol vykonávať nejakú užitočnú operáciu.

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

Vnorené rozhranie v jazyku Java

Poznámka: Rozhranie môže mať iné rozhranie, ktoré je známe ako vnorené rozhranie. Podrobne sa to dozvieme v vnorené triedy kapitola. Napríklad:

 interface printable{ void print(); interface MessagePrintable{ void msg(); } } 
Viac o Nested Interface