logo

Rozhraní v Javě

  1. Rozhraní
  2. Příklad rozhraní
  3. Vícenásobná dědičnost podle rozhraní
  4. Proč je vícenásobná dědičnost podporována v rozhraní, zatímco není podporována v případě třídy.
  5. Rozhraní značek
  6. Vnořené rozhraní

An rozhraní v Javě je plán třídy. Má statické konstanty a abstraktní metody.

Rozhraní v Javě je mechanismus k dosažení abstrakce . V rozhraní Java mohou být pouze abstraktní metody, nikoli tělo metody. Používá se k dosažení abstrakce a vícenásobnosti dědictví v Javě .

Jinými slovy, můžete říci, že rozhraní mohou mít abstraktní metody a proměnné. Nemůže mít tělo metody.

nahradit řetězec javascriptu

Rozhraní Java také představuje vztah IS-A .

Nelze ji konkretizovat stejně jako abstraktní třídu.

Od Java 8 můžeme mít výchozí a statické metody v rozhraní.

Od Java 9 můžeme mít soukromé metody v rozhraní.

Proč používat rozhraní Java?

Existují hlavně tři důvody, proč používat rozhraní. Jsou uvedeny níže.

  • Používá se k dosažení abstrakce.
  • Prostřednictvím rozhraní můžeme podporovat funkčnost vícenásobné dědičnosti.
  • Lze jej použít k dosažení volného spojení.
Proč používat rozhraní Java

Jak deklarovat rozhraní?

Rozhraní je deklarováno pomocí klíčového slova interface. Poskytuje úplnou abstrakci; znamená, že všechny metody v rozhraní jsou deklarovány s prázdným tělem a všechna pole jsou ve výchozím nastavení veřejná, statická a konečná. Třída, která implementuje rozhraní, musí implementovat všechny metody deklarované v rozhraní.

Syntax:

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

Vylepšení rozhraní Java 8

Od té doby Java 8 , rozhraní může mít výchozí a statické metody, o kterých bude pojednáno později.

Interní přidání kompilátorem

Kompilátor Java přidává veřejná a abstraktní klíčová slova před metodu rozhraní. Navíc přidává veřejná, statická a konečná klíčová slova před datové členy.

Jinými slovy, pole rozhraní jsou ve výchozím nastavení veřejná, statická a konečná a metody jsou veřejné a abstraktní.

rozhraní v Javě

Vztah mezi třídami a rozhraními

Jak je znázorněno na obrázku níže, třída rozšiřuje další třídu, rozhraní rozšiřuje další rozhraní, ale a třída implementuje rozhraní .

Vztah mezi třídou a rozhraním

Příklad rozhraní Java

V tomto příkladu má rozhraní Printable pouze jednu metodu a její implementace je poskytována ve třídě A6.

pokrytí výpisu
 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(); } } 
Otestujte to hned

Výstup:

 Hello 

Příklad rozhraní Java: Drawable

V tomto příkladu má rozhraní Drawable pouze jednu metodu. Jeho implementaci zajišťují třídy Rectangle a Circle. Ve skutečném scénáři je rozhraní definováno někým jiným, ale jeho implementaci zajišťují různí poskytovatelé implementace. Navíc to používá někdo jiný. Implementační část je skryta uživatelem, který rozhraní používá.

Soubor: 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(); }} 
Otestujte to hned

Výstup:

 drawing circle 

Příklad rozhraní Java: Banka

Podívejme se na další příklad java rozhraní, které poskytuje implementaci rozhraní Bank.

Soubor: 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()); }} 
Otestujte to hned

Výstup:

 ROI: 9.15 

Vícenásobná dědičnost v Javě podle rozhraní

Pokud třída implementuje více rozhraní nebo rozhraní rozšiřuje více rozhraní, nazývá se to vícenásobná dědičnost.

vícenásobná dědičnost v Javě
 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(); } } 
Otestujte to hned
 Output:Hello Welcome 

Otázka: Vícenásobná dědičnost není podporována prostřednictvím třídy v jazyce Java, ale je možná pomocí rozhraní, proč?

Jak jsme vysvětlili v kapitole dědění, vícenásobná dědičnost není podporována v případě třída kvůli nejednoznačnosti. Je však podporován v případě rozhraní, protože neexistuje žádná nejednoznačnost. Je to proto, že jeho implementaci zajišťuje implementační třída. Napří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(); } } 
Otestujte to hned

Výstup:

 Hello 

Jak můžete vidět na výše uvedeném příkladu, rozhraní Printable a Showable mají stejné metody, ale jeho implementaci zajišťuje třída TestTnterface1, takže neexistuje žádná nejednoznačnost.

velikosti písma v latexu

Dědičnost rozhraní

Třída implementuje rozhraní, ale jedno rozhraní rozšiřuje další rozhraní.

porovnat řetězce java
 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(); } } 
Otestujte to hned

Výstup:

 Hello Welcome 

Výchozí metoda Java 8 v rozhraní

Od Java 8 můžeme mít v rozhraní tělo metody. Ale musíme to nastavit jako výchozí metodu. Podívejme se na příklad:

Soubor: 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(); }} 
Otestujte to hned

Výstup:

 drawing rectangle default method 

Java 8 Statická metoda v rozhraní

Od Java 8 můžeme mít v rozhraní statickou metodu. Podívejme se na příklad:

Soubor: 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)); }} 
Otestujte to hned

Výstup:

 drawing rectangle 27 

Q) Co je rozhraní se značkami nebo značkami?

Rozhraní, které nemá žádného člena, je známé jako marker nebo tagované rozhraní, např. Serializovatelné , Cloneable, Remote, atd. Používají se k poskytování některých základních informací JVM, aby JVM mohlo provádět nějakou užitečnou operaci.

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

Vnořené rozhraní v Javě

Poznámka: Rozhraní může mít jiné rozhraní, které je známé jako vnořené rozhraní. Podrobně se to naučíme v vnořené třídy kapitola. Například:

 interface printable{ void print(); interface MessagePrintable{ void msg(); } } 
Více o Nested Interface