Назад к вопросам
Junior
69
questionbank

Что такое интерфейс и в чем его отличие от абстрактного класса?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

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

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

  • Реализация методов: Интерфейс не имеет реализации, абстрактный класс может иметь.
  • Поля состояния: Интерфейс не имеет полей состояния (кроме констант), абстрактный класс может иметь.
  • Множественное наследование: Класс может реализовывать несколько интерфейсов, но наследовать только один абстрактный класс.
  • Конструкторы: Интерфейс не может иметь конструкторов, абстрактный класс может.

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

interface Drawable {
    void draw(); // Абстрактный метод
}

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

abstract class Shape {
    protected int x, y; // Поля состояния

    public Shape(int x, int y) {
        this.x = x;
        this.y = y;
    }

    abstract void display(); // Абстрактный метод

    void moveTo(int newX, int newY) { // Конкретный метод
        x = newX;
        y = newY;
    }
}