Топ-100Default методы в интерфейсах - CodOrbits
LogoCodOrbits

Раздел: Java Core

Раздел охватывает ключевые возможности языка Java: аннотации, исключения, generics, лямбда-выражения, интерфейсы и другие базовые концепции.

Все разделы
Иконка Java Core

Default методы в интерфейсах

Last updated: 4 мая 2025 г.

В java 8 всё же появилась возможность добавлять реализации методов в интерфейс.

Нужно в основном для того чтобы у классов реализующих интерфейс не было слишком много одинаковых реализаций абстрактных методов интерфейса.

До java 8 приходилось делать так:

1import java.util.*;
2
3interface Car {
4    public void gas();
5    public void brake();
6}
7
8class Sedan implements Car {
9    @Override
10    public void gas() {
11        System.out.println("Gas!");
12    }
13
14    @Override
15    public void brake() {
16        System.out.println("Stop!");
17    }
18}
19
20class Truck implements Car {
21    // такая же как в прошлой реализации
22    @Override
23    public void gas() {
24        System.out.println("Gas!");
25    }
26
27    // такая же как в прошлой реализации
28    @Override
29    public void brake() {
30        System.out.println("Stop!");
31    }
32}
33
34class PickUp implements Car {
35    // такая же как в прошлой реализации
36    @Override
37    public void gas() {
38        System.out.println("Gas!");
39    }
40
41    // такая же как в прошлой реализации
42    @Override
43    public void brake() {
44        System.out.println("Stop!");
45    }
46}
47
48// Как можно увидеть у всех реализаций
49// интерфейса Car одинаковые реализации gas и brake
50// что очевидно плохо
51
52class Ddefault {
53    public static void main(String[] args) {
54        Sedan sedan = new Sedan();
55        Truck truck = new Truck();
56        PickUp pickUp = new PickUp();
57        sedan.gas();
58        truck.gas();
59        pickUp.gas();
60    }
61}

Вывод:

Добавив дефолтные реализации gas и brake в интерфейс всем классам, которые реализуют Car больше не придется делать одинаковые реализации этих методов.

После java 8:                    

1import java.util.*;
2
3// Определение интерфейса Car
4interface Car {
5    // Дефолтные реализации методов.
6    // Помечаются словом default
7    public default void gas() {
8        System.out.println("Gas!");
9    }
10
11    public default void brake() {
12        System.out.println("Stop!");
13    }
14}
15
16// Классы, реализующие интерфейс Car
17class Sedan implements Car {
18}
19
20class Truck implements Car {
21}
22
23class PickUp implements Car {
24}
25
26class Ddefault {
27    public static void main(String[] args) {
28        // Создание объектов классов
29        Sedan sedan = new Sedan();
30        Truck truck = new Truck();
31        PickUp pickUp = new PickUp();
32
33        // Вызов метода gas() для каждого объекта
34        sedan.gas();
35        truck.gas();
36        pickUp.gas();
37    }
38}

Вывод:


Следующие уроки

Анонимный класс

8
мин.

Similar Articles Icon
Divider

Функциональный интерфейс

12
мин.

Similar Articles Icon
Divider

Лямбда выражения

13
мин.

Similar Articles Icon