Ответ
Что хотят услышать интервьюеры
Интервьюеры ожидают услышать четкое понимание концепций абстрактного класса и интерфейса, включая их предназначение, основные различия и примеры использования. Важно упомянуть, как эти элементы помогают в проектировании программного обеспечения, а также их влияние на наследование и полиморфизм.
Определение
Абстрактный класс — это класс, который не может быть instantiated (создан как объект) и может содержать как абстрактные методы (без реализации), так и методы с реализацией. Его основная цель — предоставить базовую функциональность для подклассов.
Интерфейс — это контракт, который определяет набор методов, которые класс должен реализовать. Интерфейсы не могут содержать реализацию методов (до Java 8, после чего появились статические и дефолтные методы). Классы могут реализовывать несколько интерфейсов, что поддерживает множественное наследование.
Ключевые отличия
Наследование:
- Абстрактный класс поддерживает одиночное наследование (только один родительский класс).
- Интерфейсы поддерживают множественное наследование (класс может реализовывать несколько интерфейсов).
Методы:
- Абстрактный класс может содержать как абстрактные, так и конкретные методы.
- Интерфейс может содержать только абстрактные методы (или методы с реализацией начиная с Java 8).
Состояние:
- Абстрактный класс может иметь поля (состояние).
- Интерфейсы не могут иметь полей (только константы).
Использование:
- Абстрактные классы используются, когда требуется общий функционал среди классов.
- Интерфейсы используются для определения общего поведения без обязательности реализации функционала.
Пример
// Абстрактный класс
abstract class Animal {
abstract void sound(); // абстрактный метод
void sleep() { // конкретный метод
System.out.println("Sleeping...");
}
}
// Интерфейс
interface Pet {
void play(); // абстрактный метод
}
// Конкретный класс, наследующий абстрактный класс и реализующий интерфейс
class Dog extends Animal implements Pet {
void sound() {
System.out.println("Bark");
}
public void play() {
System.out.println("Dog is playing");
}
}Что могут спросить дальше
- Показать примеры использования абстрактных классов и интерфейсов.
- Объяснить, когда использовать абстрактный класс, а когда интерфейс.
- Сравнить абстрактный класс и интерфейс в контексте конкретного примера.
- Обсудить полиморфизм в контексте абстрактных классов и интерфейсов.