Проверяет понимание назначения абстрактных классов в ООП и их отличий от интерфейсов.
Абстрактный класс — это класс, который не предназначен для создания объектов. Он описывает общую структуру и поведение для группы связанных классов, но сам по себе не является конкретной сущностью. В нем могут быть как полностью реализованные методы, так и абстрактные методы — объявления без тела, которые обязаны реализовать наследники.
Абстрактные классы решают две задачи:
class Animal {
constructor(name) {
this.name = name;
}
// Абстрактный метод (имитация)
speak() {
throw new Error('Метод speak() должен быть реализован');
}
// Общая реализация
introduce() {
return `Я ${this.name}`;
}
}
class Dog extends Animal {
speak() {
return 'Гав!';
}
}
const dog = new Dog('Бобик');
console.log(dog.introduce()); // Я Бобик
console.log(dog.speak()); // Гав!В этом примере Animal — абстрактный класс (в JS нет строгого синтаксиса, но мы имитируем его через выбрасывание ошибки). Метод speak() обязателен для наследников, а introduce() уже реализован и переиспользуется.
Интерфейс описывает только сигнатуры методов, без реализации. Абстрактный класс может содержать реализацию. Поэтому абстрактный класс выбирают, когда нужно разделить общий код, а интерфейс — когда нужно только определить контракт.
Абстрактные классы применяются в ситуациях, когда несколько классов имеют общую логику и обязательные методы. Они помогают избежать дублирования, упрощают поддержку и делают архитектуру более гибкой. Используйте их, когда хотите задать базовое поведение и одновременно требовать от наследников реализации специфических функций.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
JavaScript
TypeScript
Ключевые слова
Подпишись на Node.js Developer в телеграм