logo

Інтерфейси в Java

Ан Інтерфейс на Java Мова програмування визначається як абстрактний тип, який використовується для визначення поведінки класу. Інтерфейс у Java — це схема поведінки. Інтерфейс Java містить статичні константи та абстрактні методи.

Що таке інтерфейси в Java?

Інтерфейс на Java є a механізм досягнення абстракція . В інтерфейсі Java можуть бути лише абстрактні методи, а не тіло методу. Використовується для досягнення абстракції та множинне успадкування в Java за допомогою інтерфейсу . Іншими словами, можна сказати, що інтерфейси можуть мати абстрактні методи та змінні. Він не може мати тіло методу. Інтерфейс Java також представляє зв'язок IS-A .

Коли ми вибираємо тип сутності за її поведінкою, а не через атрибут, ми повинні визначити її як інтерфейс.



Синтаксис інтерфейсів Java

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

Щоб оголосити інтерфейс, використовуйте ключове слово interface. Він використовується для забезпечення повної абстракції. Це означає, що всі методи в інтерфейсі оголошуються з порожнім тілом і є загальнодоступними, а всі поля за замовчуванням є публічними, статичними та остаточними. Клас, який реалізує інтерфейс, повинен реалізовувати всі методи, оголошені в інтерфейсі. Щоб реалізувати інтерфейс, використовуйте ключове слово implements.

Використання інтерфейсів у Java

Нижче наведено використання інтерфейсів у Java:

  • Він використовується для досягнення повної абстракції.
  • Оскільки java не підтримує множинне успадкування у випадку класу, за допомогою інтерфейсу можна досягти множинного успадкування.
  • Будь-який клас може розширювати лише 1 клас, але може будь-який клас реалізувати нескінченну кількість інтерфейсів.
  • Він також використовується для досягнення слабкого зчеплення.
  • Для реалізації абстракції використовуються інтерфейси.

Отже, виникає питання, навіщо використовувати інтерфейси, якщо у нас є абстрактні класи?

Причина в тому, що абстрактні класи можуть містити нефінальні змінні, тоді як змінні в інтерфейсі є фінальними, публічними та статичними.

// A simple interface interface Player {  final int id = 10;  int move(); }>

Зв'язок між класом та інтерфейсом

Клас може розширювати інший клас, подібний до цього, інтерфейс може розширювати інший інтерфейс. Але тільки клас може поширюватися на інший інтерфейс, і навпаки не дозволяється.

Різниця між класом та інтерфейсом

Хоча клас та інтерфейс здаються однаковими, є певні відмінності між класами та інтерфейсом. Нижче наведено основні відмінності між класом та інтерфейсом:

Клас

Інтерфейс

У класі ви можете створити екземпляри змінних і створити об’єкт.В інтерфейсі ви не можете створити екземпляри змінних і створити об’єкт.
Клас може містити конкретні (з реалізацією) методиІнтерфейс не може містити конкретних (з реалізацією) методів.
Специфікатори доступу, які використовуються з класами, є приватними, захищеними та публічними.В інтерфейсі використовується тільки один специфікатор - Public.

Реалізація: Щоб реалізувати інтерфейс, ми використовуємо ключове слово інвентар

Java
// Java program to demonstrate working of // interface import java.io.*; // A simple interface interface In1 {    // public, static and final  final int a = 10;  // public and abstract  void display(); } // A class that implements the interface. class TestClass implements In1 {    // Implementing the capabilities of  // interface.  public void display(){   System.out.println('Geek');   }  // Driver Code  public static void main(String[] args)  {  TestClass t = new TestClass();  t.display();  System.out.println(t.a);  } }>

Вихід
Geek 10>

Приклади інтерфейсів Java

Давайте розглянемо приклад транспортних засобів, таких як велосипеди, автомобілі, мотоцикли тощо, вони мають спільні функції. Тому ми створюємо інтерфейс і розміщуємо всі ці загальні функції. І дозвольте велосипедам, велосипедам, автомобілям тощо реалізувати всі ці функції у своєму класі по-своєму.

Нижче наведено реалізацію вищезазначеної теми:

Java
// Java program to demonstrate the  // real-world example of Interfaces import java.io.*; interface Vehicle {    // all are the abstract methods.  void changeGear(int a);  void speedUp(int a);  void applyBrakes(int a); } class Bicycle implements Vehicle{    int speed;  int gear;    // to change gear  @Override  public void changeGear(int newGear){    gear = newGear;  }    // to increase speed  @Override  public void speedUp(int increment){    speed = speed + increment;  }    // to decrease speed  @Override  public void applyBrakes(int decrement){    speed = speed - decrement;  }    public void printStates() {  System.out.println('speed: ' + speed  + ' gear: ' + gear);  } } class Bike implements Vehicle {    int speed;  int gear;    // to change gear  @Override  public void changeGear(int newGear){    gear = newGear;  }    // to increase speed  @Override  public void speedUp(int increment){    speed = speed + increment;  }    // to decrease speed  @Override  public void applyBrakes(int decrement){    speed = speed - decrement;  }    public void printStates() {  System.out.println('speed: ' + speed  + ' gear: ' + gear);  }   } class GFG {    public static void main (String[] args) {    // creating an instance of Bicycle  // doing some operations  Bicycle bicycle = new Bicycle();  bicycle.changeGear(2);  bicycle.speedUp(3);  bicycle.applyBrakes(1);    System.out.println('Bicycle present state :');  bicycle.printStates();    // creating instance of the bike.  Bike bike = new Bike();  bike.changeGear(1);  bike.speedUp(4);  bike.applyBrakes(3);    System.out.println('Bike present state :');  bike.printStates();  } }>

Вихід
Bicycle present state : speed: 2 gear: 2 Bike present state : speed: 1 gear: 1>

Переваги інтерфейсів в Java

Переваги використання інтерфейсів у Java такі:

  • Не турбуючись про частину реалізації, ми можемо забезпечити безпеку впровадження.
  • У Java заборонено багаторазове успадкування, однак ви можете використовувати інтерфейс, щоб використовувати його, оскільки ви можете реалізувати більше одного інтерфейсу.

Множинне успадкування в Java за допомогою інтерфейсу

Множинне успадкування — це концепція ООП, яку неможливо реалізувати в Java за допомогою класів. Але ми можемо використовувати багаторазове успадкування в Java за допомогою Interface. перевіримо це на прикладі.

приклад:

Java
// Java program to demonstrate How Diamond Problem // Is Handled in case of Default Methods // Interface 1 interface API {  // Default method  default void show()  {  // Print statement  System.out.println('Default API');  } } // Interface 2 // Extending the above interface interface Interface1 extends API {  // Abstract method  void display(); } // Interface 3 // Extending the above interface interface Interface2 extends API {  // Abstract method  void print(); } // Main class // Implementation class code class TestClass implements Interface1, Interface2 {  // Overriding the abstract method from Interface1  public void display()  {  System.out.println('Display from Interface1');  }  // Overriding the abstract method from Interface2  public void print()  {  System.out.println('Print from Interface2');  }  // Main driver method  public static void main(String args[])  {  // Creating object of this class  // in main() method  TestClass d = new TestClass();  // Now calling the methods from both the interfaces  d.show(); // Default method from API  d.display(); // Overridden method from Interface1  d.print(); // Overridden method from Interface2  } }>

Вихід
Default API>

Нові функції, додані в інтерфейси в JDK 8

Нижче наведено певні функції, додані до інтерфейсів в оновленні JDK 8:

1. До JDK 8 інтерфейс не міг визначити реалізацію. Тепер ми можемо додати реалізацію за замовчуванням для методів інтерфейсу. Ця реалізація за замовчуванням має спеціальне використання та не впливає на наміри, що стоять за інтерфейсами.

str.substring у java

Припустимо, нам потрібно додати нову функцію до існуючого інтерфейсу. Очевидно, що старий код не працюватиме, оскільки класи не реалізували ці нові функції. Отже, за допомогою реалізації за замовчуванням ми надамо тіло за замовчуванням для щойно доданих функцій. Тоді старі коди все ще працюватимуть.

Нижче наведено реалізацію вищезазначеного пункту:

Java
// Java program to show that interfaces can // have methods from JDK 1.8 onwards interface In1 {  final int a = 10;  default void display()  {  System.out.println('hello');  } } // A class that implements the interface. class TestClass implements In1 {  // Driver Code  public static void main (String[] args)  {  TestClass t = new TestClass();  t.display();  } }>

Вихід
hello>

2. Ще одна функція, додана в JDK 8, полягає в тому, що тепер ми можемо визначати статичні методи в інтерфейсах, які можна викликати незалежно без об’єкта.

Примітка: ці методи не успадковуються.

Java
// Java Program to show that interfaces can // have methods from JDK 1.8 onwards interface In1 {  final int a = 10;  static void display()  {  System.out.println('hello');  } } // A class that implements the interface. class TestClass implements In1 {  // Driver Code  public static void main (String[] args)  {  In1.display();  } }>

Вихід
hello>

Розширення інтерфейсів

Один інтерфейс може успадковувати інший за допомогою ключового слова extends. Коли клас реалізує інтерфейс, який успадковує інший інтерфейс, він повинен забезпечити реалізацію для всіх методів, необхідних ланцюжку успадкування інтерфейсу.

Програма 1:

Java
interface A {  void method1();  void method2(); } // B now includes method1 and method2 interface B extends A {  void method3(); } // the class must implement all method of A and B. class gfg implements B {  public void method1()  {  System.out.println('Method 1');  }  public void method2()  {  System.out.println('Method 2');  }  public void method3()  {  System.out.println('Method 3');  } }>

Програма 2:

Java
interface Student  {  public void data();   } class avi implements Student {  public void data ()  {  String name='avinash';  int rollno=68;  System.out.println(name);  System.out.println(rollno);  } } public class inter_face  {  public static void main (String args [])  {  avi h= new avi();  h.data();  } }>

Вихід
avinash 68>

Простим способом інтерфейс містить кілька абстрактних методів, тому запишіть реалізацію в класах реалізації. Якщо реалізація не може забезпечити реалізацію всіх абстрактних методів, тоді оголосите клас реалізації за допомогою абстрактного модифікатора та завершіть реалізацію методу, що залишився, у наступних створених дочірніх класах. Можна оголосити декілька дочірніх класів, але нарешті ми завершили реалізацію всіх абстрактних методів.

Загалом процес розробки йде покроково:

Рівень 1 – інтерфейси: містить деталі служби.
Рівень 2 – абстрактні класи: містить часткову реалізацію.
Рівень 3 – класи реалізації: містить усі реалізації.
Рівень 4 – Кінцевий код/основний метод: він має доступ до всіх даних інтерфейсів.

приклад:

Java
// Java Program for // implementation Level wise import java.io.*; import java.lang.*; import java.util.*; // Level 1 interface Bank {  void deposit();  void withdraw();  void loan();  void account(); } // Level 2 abstract class Dev1 implements Bank {  public void deposit()  {  System.out.println('Your deposit Amount :' + 100);  } } abstract class Dev2 extends Dev1 {  public void withdraw()  {  System.out.println('Your withdraw Amount :' + 50);  } } // Level 3 class Dev3 extends Dev2 {  public void loan() {}  public void account() {} } // Level 4 class GFG {  public static void main(String[] args)  {  Dev3 d = new Dev3();  d.account();  d.loan();  d.deposit();  d.withdraw();  } }>

Вихід
Your deposit Amount :100 Your withdraw Amount :50>

Нові функції, додані в інтерфейси в JDK 9

Починаючи з Java 9 і далі, інтерфейси також можуть містити наступне:

  1. Статичні методи
  2. Приватні методи
  3. Приватні статичні методи

Важливі моменти в інтерфейсах Java

У цій статті ми дізнаємося деякі важливі моменти про інтерфейси, як зазначено нижче:

  • Ми не можемо створити екземпляр (інтерфейс не може бути створений) інтерфейсу, але ми можемо зробити посилання на нього, яке посилається на Object класу його реалізації.
  • Клас може реалізовувати більше одного інтерфейсу.
  • Інтерфейс може поширюватися на інший інтерфейс або інтерфейс (більш ніж один інтерфейс).
  • Клас, який реалізує інтерфейс, повинен реалізовувати всі методи в інтерфейсі.
  • Усі методи публічні та абстрактні. І всі поля є публічними, статичними та остаточними.
  • Він використовується для досягнення множинного успадкування.
  • Використовується для досягнення слабкого зчеплення.
  • Всередині інтерфейсу неможливо оголосити змінні екземпляра, оскільки за замовчуванням змінні є публічний статичний фінал.
  • Всередині інтерфейсу конструктори заборонені.
  • Всередині інтерфейсу основний метод не дозволяється.
  • Всередині інтерфейсу оголошення статичних, остаточних і приватних методів неможливе.

Необхідно прочитати

Часті запитання щодо інтерфейсів

1. Що таке маркер або тегований інтерфейс?

Інтерфейси з тегами – це інтерфейси без будь-яких методів, вони служать маркером без будь-яких можливостей.

2. Скільки типів інтерфейсів в Java?

Нижче наведено типи інтерфейсів у Java:

  1. Функціональний інтерфейс
  2. Інтерфейс маркера

3. Чому множинне успадкування не підтримується через клас у Java?

Множинне успадкування не підтримується через клас у Java, щоб уникнути певних проблем, як-от неоднозначність і проблеми з ромбами.