Что такое полиморфизм?
Классы
Полиморфизм — это принцип ООП, позволяющий использовать единый интерфейс для объектов разных типов, каждый из которых реализует поведение по-своему.
Идея
Один и тот же вызов метода даёт разное поведение в зависимости от типа объекта.
class Shape {
area() { return 0; }
}
class Circle extends Shape {
constructor(r) { super(); this.r = r; }
area() { return Math.PI * this.r ** 2; }
}
class Square extends Shape {
constructor(s) { super(); this.s = s; }
area() { return this.s ** 2; }
}
const shapes = [new Circle(2), new Square(3)];
shapes.forEach((s) => console.log(s.area())); // разные реализации area()Код работает с абстракцией Shape, не зная конкретный тип.
Формы полиморфизма
- Переопределение методов (overriding) — наследник меняет реализацию.
- Утиная типизация (duck typing) — в JS важно наличие метода, а не тип: «если крякает как утка».
Зачем нужен
- Расширяемость: новый тип добавляется без изменения существующего кода (принцип Open/Closed).
- Единообразная работа с разными объектами.
Коротко для собеседования
Полиморфизм — единый интерфейс для разных типов с индивидуальной реализацией (например, переопределённый area()). В JS работает через переопределение методов и утиную типизацию, обеспечивая расширяемость по принципу Open/Closed.