Какой тип методов в Java не имеет реализации?

«Какой тип методов в Java не имеет реализации?» — вопрос из категории Основы программирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Методы, не имеющие реализации (тела), — это абстрактные (abstract) методы.

Где они объявляются:

  1. В абстрактных классах:

    abstract class Animal {
        // Абстрактный метод — нет тела, только сигнатура.
        abstract void makeSound();
    
        // Обычный метод — имеет реализацию.
        void sleep() {
            System.out.println("Zzz...");
        }
    }
  2. В интерфейсах (до Java 8): Все методы интерфейса по умолчанию были public abstract.

Как они используются: Абстрактный метод обязан быть реализован (переопределен) в первом конкретном (неабстрактном) классе-наследнике.

class Dog extends Animal {
    // Реализация абстрактного метода.
    @Override
    void makeSound() {
        System.out.println("Гав!");
    }
}

Исключение (с Java 8): В интерфейсах появились методы default и static, которые имеют реализацию.