Чем отличаются абстрактный класс и интерфейс? Для чего нужны?

Абстрактный класс — это класс, который может содержать как реализованные методы, так и абстрактные (без реализации). Он служит базой для наследования и может содержать состояние (поля).

Короткий ответ

Что ответить на собеседовании

Абстрактный класс — это класс, который может содержать как реализованные методы, так и абстрактные (без реализации). Он служит базой для наследования и может содержать состояние (поля).

Подробный разбор

Ответ с пояснениями

Абстрактный класс — это класс, который может содержать как реализованные методы, так и абстрактные (без реализации). Он служит базой для наследования и может содержать состояние (поля).

Интерфейс — это контракт, который определяет набор методов без реализации (в классическом понимании). Класс, реализующий интерфейс, обязан реализовать все его методы.

Ключевые отличия:

  • Абстрактный класс может содержать реализацию и состояние, интерфейс — только сигнатуры методов (в некоторых языках интерфейсы могут содержать дефолтные методы).
  • Класс может наследоваться только от одного абстрактного класса, но реализовывать несколько интерфейсов.
  • Абстрактный класс задаёт частичную реализацию, интерфейс — только контракт.

Пример на Java:

abstract class Animal {
    void eat() { System.out.println("Eating"); }
    abstract void sound();
}

interface Flyable {
    void fly();
}

class Bird extends Animal implements Flyable {
    void sound() { System.out.println("Chirp"); }
    public void fly() { System.out.println("Flying"); }
}

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее