Рубрики

Интерфейсы в Java

Как и класс, интерфейс может иметь методы и переменные, но методы, объявленные в интерфейсе, по умолчанию являются абстрактными (только сигнатура метода, без тела).

  • Интерфейсы определяют, что должен делать класс, а не как. Это план класса.
  • Интерфейс — это возможности, такие как Player может быть интерфейсом, и любой класс, реализующий Player, должен быть в состоянии (или должен реализовывать) move (). Таким образом, он определяет набор методов, которые должен реализовать класс.
  • Если класс реализует интерфейс и не предоставляет тела методов для всех функций, указанных в интерфейсе, тогда класс должен быть объявлен как абстрактный.
  • Пример библиотеки Java: интерфейс компаратора . Если класс реализует этот интерфейс, его можно использовать для сортировки коллекции.

Синтаксис:

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

Чтобы объявить интерфейс, используйте ключевое слово interface . Он используется для обеспечения полной абстракции. Это означает, что все методы в интерфейсе объявлены с пустым телом и являются открытыми, а все поля по умолчанию являются открытыми, статическими и окончательными. Класс, реализующий интерфейс, должен реализовывать все методы, объявленные в интерфейсе. Для реализации использования интерфейса инвентаря ключевого слова.

Почему мы используем интерфейс?

  • Он используется для достижения полной абстракции.
  • Так как java не поддерживает множественное наследование в случае класса, но с помощью интерфейса это может обеспечить множественное наследование.
  • Он также используется для достижения слабой связи.
  • Интерфейсы используются для реализации абстракции. Поэтому возникает вопрос, зачем использовать интерфейсы, когда у нас есть абстрактные классы?

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

    // Простой интерфейс

    interface Player

    {

        final int id = 10;

        int move();

    }

Для реализации интерфейса мы используем ключевое слово: реализовать

// Java-программа для демонстрации работы
// интерфейс.

import java.io.*;

  
// Простой интерфейс

interface In1

{

    // public, static и final

    final int a = 10;

  

    // публично и абстрактно

    void display();

}

  
// Класс, который реализует интерфейс.

class TestClass implements In1

{

    // Реализация возможностей

    // интерфейс.

    public void display()

    {

        System.out.println("Geek");

    }

  

    // Код драйвера

    public static void main (String[] args)

    {

        TestClass t = new TestClass();

        t.display();

        System.out.println(a);

    }

}

Выход:

Geek
10

Пример из реальной жизни:
Давайте рассмотрим пример транспортных средств, таких как велосипед, автомобиль, велосипед ………, они имеют общие функции. Таким образом, мы делаем интерфейс и помещаем все эти общие функции. И пусть Bicycle, Bike, car… и т. Д. Реализуют все эти функции в своем классе по-своему.

import java.io.*;

  

interface Vehicle {

      

    // все абстрактные методы.

    void changeGear(int a);

    void speedUp(int a);

    void applyBrakes(int a);

}

  

class Bicycle implements Vehicle{

      

    int speed;

    int gear;

      

     // переключить передачу

    @Override

    public void changeGear(int newGear){

          

        gear = newGear;

    }

      

    // увеличить скорость

    @Override

    public void speedUp(int increment){

          

        speed = speed + increment;

    }

      

    // уменьшить скорость

    @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;

      

    // переключить передачу

    @Override

    public void changeGear(int newGear){

          

        gear = newGear;

    }

      

    // увеличить скорость

    @Override

    public void speedUp(int increment){

          

        speed = speed + increment;

    }

      

    // уменьшить скорость

    @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) {

      

        // создание велосипеда

        // делаем некоторые операции

        Bicycle bicycle = new Bicycle();

        bicycle.changeGear(2);

        bicycle.speedUp(3);

        bicycle.applyBrakes(1);

          

        System.out.println("Bicycle present state :");

        bicycle.printStates();

          

        // создание экземпляра велосипеда.

        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

Новые функции, добавленные в интерфейсы в JDK 8

  1. До JDK 8 интерфейс не мог определить реализацию. Теперь мы можем добавить реализацию по умолчанию для методов интерфейса. Эта реализация по умолчанию имеет специальное использование и не влияет на намерения за интерфейсами.

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

    // Пример, показывающий, что интерфейсы могут
    // есть методы начиная с JDK 1.8

    interface In1

    {

        final int a = 10;

        default void display()

        {

            System.out.println("hello");

        }

    }

      
    // Класс, который реализует интерфейс.

    class TestClass implements In1

    {

        // Код драйвера

        public static void main (String[] args)

        {

            TestClass t = new TestClass();

            t.display();

        }

    }

    Выход :

    hello
    
  2. Еще одна особенность, добавленная в JDK 8, заключается в том, что теперь мы можем определять статические методы в интерфейсах, которые можно вызывать независимо без объекта. Примечание: эти методы не наследуются.

    // Пример, показывающий, что интерфейсы могут
    // есть методы начиная с JDK 1.8

    interface In1

    {

        final int a = 10;

        static void display()

        {

            System.out.println("hello");

        }

    }

      
    // Класс, который реализует интерфейс.

    class TestClass implements In1

    {

        // Код драйвера

        public static void main (String[] args)

        {

            In1.display();

        }

    }

    Выход :

    hello

Важные моменты об интерфейсе или резюме статьи:

  • Мы не можем создать экземпляр (интерфейс не может быть создан) интерфейса, но мы можем сделать ссылку на него, который ссылается на Object его реализующего класса.
  • Класс может реализовывать более одного интерфейса.
  • Интерфейс может расширять другой интерфейс или интерфейсы (более одного интерфейса).
  • Класс, реализующий интерфейс, должен реализовывать все методы интерфейса.
  • Все методы являются публичными и абстрактными. И все поля являются общедоступными, статическими и окончательными.
  • Он используется для достижения множественного наследования.
  • Он используется для достижения слабой связи.

Новые функции, добавленные в интерфейсы в JDK 9
Начиная с Java 9, интерфейсы могут также содержать следующие

  1. Статические методы
  2. Частные методы
  3. Частные статические методы

Статьи по Теме:

Эта статья предоставлена Мехаком Кумаром. и Ницдхерендра . Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по обсуждаемой теме

Рекомендуемые посты:

Интерфейсы в Java

0.00 (0%) 0 votes