- Rozhranie
- Príklad rozhrania
- Viacnásobné dedičstvo podľa rozhrania
- Prečo je v rozhraní podporované viacnásobné dedičstvo, zatiaľ čo nie je podporované v prípade triedy.
- Rozhranie značky
- 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.
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é.
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 .
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ť.
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