- Інтерфейс
- Приклад інтерфейсу
- Множинне успадкування за інтерфейсом
- Чому множинне успадкування підтримується в інтерфейсі, тоді як воно не підтримується у випадку класу.
- Інтерфейс маркера
- Вкладений інтерфейс
Ан інтерфейс на Java є планом класу. Він має статичні константи та абстрактні методи.
Інтерфейс на Java є механізм досягнення абстракція . В інтерфейсі Java можуть бути лише абстрактні методи, а не тіло методу. Використовується для досягнення абстракції та множинності успадкування в Java .
Іншими словами, можна сказати, що інтерфейси можуть мати абстрактні методи та змінні. Він не може мати тіло методу.
Інтерфейс Java також представляє зв'язок IS-A .
Його не можна створити так само, як абстрактний клас.
З Java 8 ми можемо мати за замовчуванням і статичні методи в інтерфейсі.
З Java 9 ми можемо мати приватні методи в інтерфейсі.
Навіщо використовувати інтерфейс Java?
Є три основні причини для використання інтерфейсу. Вони наведені нижче.
- Використовується для досягнення абстракції.
- Через інтерфейс ми можемо підтримувати функціональність множинного успадкування.
- Його можна використовувати для досягнення слабкого зчеплення.
Як оголосити інтерфейс?
Інтерфейс оголошується за допомогою ключового слова interface. Він забезпечує повну абстракцію; означає, що всі методи в інтерфейсі оголошуються з порожнім тілом, і всі поля є відкритими, статичними та остаточними за замовчуванням. Клас, який реалізує інтерфейс, повинен реалізовувати всі методи, оголошені в інтерфейсі.
Синтаксис:
interface { // declare constant fields // declare methods that abstract // by default. }
Покращення інтерфейсу Java 8
Оскільки Java 8 , інтерфейс може мати стандартні та статичні методи, які обговорюватимуться пізніше.
Внутрішнє доповнення компілятором
Компілятор Java додає публічні та абстрактні ключові слова перед методом інтерфейсу. Крім того, він додає публічні, статичні та кінцеві ключові слова перед елементами даних.
Іншими словами, поля інтерфейсу є загальнодоступними, статичними та остаточними за замовчуванням, а методи є публічними та абстрактними.
Зв'язок між класами та інтерфейсами
Як показано на малюнку нижче, клас розширює інший клас, інтерфейс розширює інший інтерфейс, але a клас реалізує інтерфейс .
Приклад інтерфейсу Java
У цьому прикладі інтерфейс Printable має лише один метод, і його реалізація надається в класі 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(); } }Перевірте зараз
Вихід:
Hello
Приклад інтерфейсу Java: можливість малювання
У цьому прикладі інтерфейс Drawable має лише один метод. Його реалізацію забезпечують класи Rectangle і Circle. У реальному сценарії інтерфейс визначається кимось іншим, але його реалізація забезпечується різними постачальниками реалізації. Більш того, ним користується хтось інший. Частина реалізації прихована користувачем, який використовує інтерфейс.
Файл: TestInterface1.java
stdin в c
//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(); }}Перевірте зараз
Вихід:
drawing circle
Приклад інтерфейсу Java: Банк
Давайте подивимося інший приклад інтерфейсу Java, який забезпечує реалізацію інтерфейсу Bank.
Файл: 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()); }}Перевірте зараз
Вихід:
ROI: 9.15
Множинне успадкування в Java за інтерфейсом
Якщо клас реалізує кілька інтерфейсів або інтерфейс розширює кілька інтерфейсів, це називається множинним успадкуванням.
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(); } }Перевірте зараз
Output:Hello Welcome
Q) Множинне успадкування не підтримується через клас у java, але це можливо через інтерфейс, чому?
Як ми пояснювали в розділі про успадкування, множинне успадкування не підтримується у випадку клас через двозначність. Однак він підтримується у випадку інтерфейсу, оскільки немає двозначності. Це тому, що його реалізація забезпечується класом реалізації. Наприклад:
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(); } }Перевірте зараз
Вихід:
Hello
Як ви можете бачити в наведеному вище прикладі, інтерфейси Printable і Showable мають однакові методи, але їх реалізація забезпечується класом TestTnterface1, тому немає ніякої двозначності.
Спадкування інтерфейсу
Клас реалізує інтерфейс, але один інтерфейс розширює інший інтерфейс.
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(); } }Перевірте зараз
Вихід:
Hello Welcome
Стандартний метод Java 8 в інтерфейсі
Починаючи з Java 8, ми можемо мати тіло методу в інтерфейсі. Але нам потрібно зробити це методом за замовчуванням. Давайте подивимося на приклад:
Файл: 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(); }}Перевірте зараз
Вихід:
drawing rectangle default method
Статичний метод Java 8 в інтерфейсі
Починаючи з Java 8, ми можемо мати статичний метод в інтерфейсі. Давайте подивимося на приклад:
mylivecricket.in
Файл: 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)); }}Перевірте зараз
Вихід:
drawing rectangle 27
З) Що таке маркерний або тегований інтерфейс?
Інтерфейс, який не має членів, відомий як маркерний або тегований інтерфейс, наприклад, Серіалізований , Cloneable, Remote тощо. Вони використовуються для надання певної необхідної інформації JVM, щоб JVM могла виконувати певні корисні операції.
//How Serializable interface is written? public interface Serializable{ }
Вкладений інтерфейс у Java
Примітка. Інтерфейс може мати інший інтерфейс, відомий як вкладений інтерфейс. Детально про це дізнаємося в вкладені класи розділ. Наприклад:
interface printable{ void print(); interface MessagePrintable{ void msg(); } }Докладніше про вкладений інтерфейс