Может ли интерфейс содержать не абстрактные методы

«Может ли интерфейс содержать не абстрактные методы» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, начиная с Java 8 интерфейсы могут содержать неабстрактные методы с реализацией:

  1. default методы - имеют реализацию и могут быть переопределены в классах:
interface MyInterface {
    default void show() {
        System.out.println("Default method");
    }
}
  1. static методы - принадлежат интерфейсу, а не экземплярам:
interface MyInterface {
    static void print() {
        System.out.println("Static method");
    }
}
  1. private методы (с Java 9) - вспомогательные методы внутри интерфейса.

Это позволяет расширять интерфейсы, не ломая существующую реализацию.