Как реализовать интерфейс или абстрактный класс с несколькими методами в Java?

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

Ответ

Для интерфейса (Java 8+):

  • Все абстрактные методы (без тела) обязательны к реализации.
  • Методы с модификатором default имеют реализацию по умолчанию и реализовывать их не обязательно.
  • Статические методы интерфейса также не требуют реализации в классе.

Пример с интерфейсом:

interface MyInterface {
    void abstractMethod(); // Обязателен к реализации

    default void defaultMethod() {
        System.out.println("Default implementation");
    }

    static void staticMethod() {
        System.out.println("Static method");
    }
}

class MyClass implements MyInterface {
    @Override
    public void abstractMethod() {
        System.out.println("Implemented abstract method");
    }
    // defaultMethod() можно не переопределять
}

Для абстрактного класса:

  • Все абстрактные методы (abstract) обязательны к реализации.
  • Обычные (неабстрактные) методы наследуются и могут быть переопределены по необходимости.

Пример с абстрактным классом:

abstract class MyAbstractClass {
    abstract void abstractMethod(); // Обязателен к реализации

    void concreteMethod() {
        System.out.println("Concrete method from abstract class");
    }
}

class MyConcreteClass extends MyAbstractClass {
    @Override
    void abstractMethod() {
        System.out.println("Implemented abstract method");
    }
    // concreteMethod() можно использовать как есть или переопределить
}

Почему это важно: Соблюдение контракта интерфейса/абстрактного класса гарантирует полиморфное поведение и корректную работу системы.