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 содержит частично реализованное поведение.