Бесплатный курс по Java: от основ до продвинутого уровня
Default методы в интерфейсах
В java 8 всё же появилась возможность добавлять реализации методов в интерфейс.
Нужно в основном для того чтобыу классов реализующих интерфейс не было слишком много одинаковых реализацийабстрактных методов интерфейса.
До java 8 приходилось делать так:
import java.util.*;
interface Car {
public void gas();
public void brake();
}
class Sedan implements Car {
@Override
public void gas() {
System.out.println(“Gas!”);
}
@Override
public void brake() {
System.out.println(“Stop!”);
}
}
class Truck implements Car {
// такая же как в прошлой реализации
@Override
public void gas() {
System.out.println(“Gas!”);
}
// такая же как в прошлой реализации
@Override
public void brake() {
System.out.println(“Stop!”);
}
}
class PickUp implements Car {
// такая же как в прошлой реализации
@Override
public void gas() {
System.out.println(“Gas!”);
}
// такая же как в прошлой реализации
@Override
public void brake() {
System.out.println(“Stop!”);
}
}
// Как можно увидеть у всех реализаций
// интерфейса Car одинаковые реализации gas и brake
// что очевидно плохо
class Ddefault {
public static void main(String[] args) {
Sedan sedan = new Sedan();
Truck truck = new Truck();
PickUp pickUp = new PickUp();
sedan.gas();
truck.gas();
pickUp.gas();
}
}
Вывод:
Добавив дефолтные реализации gas и brake в интерфейс всем классам, которые реализуют Car больше не придется делать одинаковые реализации этих методов.
После java 8:
import java.util.*;
// Определение интерфейса Car
interface Car {
// Дефолтные реализации методов.
// Помечаются словом default
public default void gas() {
System.out.println(“Gas!”);
}
public default void brake() {
System.out.println(“Stop!”);
}
}
// Классы, реализующие интерфейс Car
class Sedan implements Car {
}
class Truck implements Car {
}
class PickUp implements Car {
}
class Ddefault {
public static void main(String[] args) {
// Создание объектов классов
Sedan sedan = new Sedan();
Truck truck = new Truck();
PickUp pickUp = new PickUp();
// Вызов метода gas() для каждого объекта
sedan.gas();
truck.gas();
pickUp.gas();
}
}
Узнайте про анонимные классы в Java: одноразовые реализации интерфейсов без создания отдельных классов. Примеры кода и практическое применение.
Time to read: 8
Функциональный интерфейс
Изучите функциональные интерфейсы в Java: как один абстрактный метод позволяет использовать лямбда-выражения и анонимные классы для функционального программирования.
Time to read: 12
Лямбда выражения
Лямбда-выражения в Java: краткая реализация функциональных интерфейсов. Сравнение с анонимными классами и примеры использования с методами.