Рубрики
Без рубрики

Методы по умолчанию в Java 8

Проблема интерфейса автомобиля{ недействительный запуск двигателя(); недействительный запуск двигателя(); } класс… С пометкой java, java 8, новички, учебник.

Проблема

interface Automobile{
    void engineStart();
    void engineStop();
}

class Car implements Automobile{
    public void engineStart() { }
    public void engineStop() { }
}

class Bus implements Automobile{
    public void engineStart() { }
    public void engineStop() { }
}
  • Просто думаю, что в будущем нам нужно добавить еще один метод в интерфейс.
  • Но если мы добавим его, нам придется изменить все остальные классы, в которых реализован этот интерфейс.

Методы по умолчанию

  • Чтобы преодолеть это, в Java 1.8 введены методы по умолчанию
  • Принцип разделения интерфейса может быть заменен методами по умолчанию в Java.
  • Это лучший вариант для изменения существующих интерфейсов без изменения реализованных классов.
  • До Java 1.7 каждый метод внутри интерфейса всегда был общедоступным и абстрактным.
  • В версии 1.8 также разрешены методы по умолчанию и статические методы.
  • В версии 1.9 также разрешены частные методы.
  • Методы по умолчанию могут быть переопределены в реализующем классе.
  • Методы по умолчанию не могут быть переопределены методами класса объектов.

Решение с использованием методов Java 8 по умолчанию

interface Automobile{
    default void m1(){}
}

interface Car{
    default void m1(){}
}

class Mazda3 implements Automobile, Car{
    public void m1() { }
}
  • В таких случаях вам необходимо переопределить метод по умолчанию.
  • В противном случае класс Mazda3 не сможет найти, какой метод m1( ) необходимо вызвать.

Или же вы можете использовать его таким образом, также используя ключевое слово ” супер “.

interface Automobile{
    default void m1(){}
}

interface Car{
    default void m1(){}
}

class Mazda3 implements Automobile, Car{
    public void m1() {
        Automobile.super.m1();    
    }
}

Оригинал: “https://dev.to/raviyasas/default-methods-in-java-8-4b96”