- Rozhraní
- Příklad rozhraní
- Vícenásobná dědičnost podle rozhraní
- Proč je vícenásobná dědičnost podporována v rozhraní, zatímco není podporována v případě třídy.
- Rozhraní značek
- 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í.
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í.
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í .
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.
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