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
мин.
Функциональный интерфейс
12
мин.
Лямбда выражения
13
мин.