Mediuminterfaceabstract
Чем интерфейс отличается от абстрактного класса?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Абстрактный класс — может иметь состояние (поля), конструкторы, методы с реализацией; класс наследует только один (single inheritance). Интерфейс — только константы (static final), без состояния; класс может implements много интерфейсов.
// Абстрактный класс — общая реализация + состояние
abstract class Animal {
protected int age;
abstract void speak();
void eat() { /* общая реализация */ }
}
// Интерфейс — контракт/поведение
interface Comparable<T> {
int compareTo(T o);
}- С Java 8 грани размыты (
default-методы), но интерфейс всё ещё без полей-состояния; - Интерфейс можно расширять, добавляя
default-метод без нарушения наследников; - Правило: интерфейсы — для типов, абстрактный класс — для code-sharing в одной иерархии.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.