Ответ
Абстрактный класс — это класс, который нельзя инстанциировать напрямую. Он служит шаблоном для других классов, определяя общую структуру и поведение.
Особенности:
- Может содержать абстрактные методы (без реализации) и обычные методы.
- Наследники обязаны реализовать все абстрактные методы.
- Позволяет избежать дублирования кода.
Пример (TypeScript):
abstract class Animal {
abstract makeSound(): void; // Абстрактный метод
move(): void { // Обычный метод
console.log("Moving...");
}
}
class Dog extends Animal {
makeSound(): void { // Обязательная реализация
console.log("Woof!");
}
}
const dog = new Dog();
dog.makeSound(); // "Woof!"
dog.move(); // "Moving..." Ответ 18+ 🔞
Ну вот, сидишь ты такой, пишешь код, и тут — бац! — тебе говорят: «А сделай-ка нам класс, от которого нельзя создать объект». И ты такой: «Чё? Как это нельзя? Я ж его написал, он существует!» А это, блядь, абстрактный класс, ёпта!
Представь себе чертёж табуретки, но не саму табуретку. На чертеже всё есть: ножки, сиденье, даже размеры. Но сесть на него нельзя, это же бумага! Вот абстрактный класс — это такой чертёж для других классов. Сам по себе он — пшик, инстанциировать его нельзя, но зато он диктует правила, сука!
В чём его сила, мать его?
- Может содержать методы, которые только объявлены, но не написаны. Это как сказать: «Наследник, у тебя ДОЛЖЕН быть метод
makeSound(), а как ты его реализуешь — твои проблемы, хоть сопи, хоть свисти». - Может содержать и обычные, готовые методы, чтобы наследники не парились и не копипастили один и тот же код. Удобно же, блядь!
- А главное — все, кто от него наследуется, ОБЯЗАНЫ реализовать все эти абстрактные методы. Не реализовал? Компилятор тебе ебальник набьёт, и правильно сделает! Порядок, нахуй, а не бардак.
Смотри, как это выглядит в деле (TypeScript):
abstract class Animal {
abstract makeSound(): void; // Абстрактный метод. Просто заглушка, пустое место.
move(): void { // А вот это уже нормальный, рабочий метод.
console.log("Moving...");
}
}
class Dog extends Animal {
makeSound(): void { // А тут наследник ОБЯЗАН заполнить пустое место. И пёс это делает!
console.log("Woof!");
}
}
const dog = new Dog(); // А вот так уже можно, это же конкретная собака, а не абстрактное животное!
dog.makeSound(); // "Woof!"
dog.move(); // "Moving..." // И готовый метод от родителя работает, ебать его в сраку!
Короче, абстрактный класс — это такой строгий папаша, который говорит: «Вот тебе план, сынок. Основу я тебе дал, а детали — твоя головная боль. Но сделаешь не по плану — я тебе устрою ёперный театр!». И ведь правильно, а то потом в проекте одни распиздяйства начнутся.