Sobes.tech
Back to questions
Junior — Middle
59

В чем заключается разница между интерфейсом и абстрактным классом, и зачем использовать интерфейс?

Answer from AI

sobes.tech AI

Разница между интерфейсом и абстрактным классом:

  • Интерфейс описывает только набор методов (и с Java 8 — default и static методы), которые класс должен реализовать. Интерфейс не содержит состояния (переменных экземпляра), только константы.
  • Абстрактный класс может содержать как абстрактные методы (без реализации), так и конкретные методы с реализацией, а также поля (состояние).

Зачем использовать интерфейс?

  • Для задания контракта, который могут реализовать разные классы, не связанных общей иерархией.
  • Позволяет реализовать множественное наследование поведения, так как класс может реализовывать несколько интерфейсов.

Пример:

interface Printable {
    void print();
}

abstract class Document {
    abstract void open();
    void close() {
        System.out.println("Document closed");
    }
}

class Report extends Document implements Printable {
    void open() {
        System.out.println("Report opened");
    }
    public void print() {
        System.out.println("Report printed");
    }
}

Здесь интерфейс Printable задаёт обязательный метод print(), а абстрактный класс Document содержит частично реализованное поведение.