Что такое наследование в ООП?

«Что такое наследование в ООП?» — вопрос из категории ООП, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Наследование — это механизм объектно-ориентированного программирования, позволяющий создавать новый класс (дочерний) на основе существующего (родительского). Дочерний класс наследует свойства и методы родителя, что способствует повторному использованию кода и построению иерархии.

Пример в JavaScript/Node.js:

// Родительский класс
class Logger {
  constructor(name) {
    this.name = name;
  }

  log(message) {
    console.log(`[${this.name}] ${message}`);
  }
}

// Дочерний класс, расширяющий функциональность
class FileLogger extends Logger {
  constructor(name, filePath) {
    super(name); // Вызов конструктора родителя
    this.filePath = filePath;
  }

  // Переопределение метода
  log(message) {
    const logEntry = `[${this.name}] ${new Date().toISOString()}: ${message}n`;
    // Здесь могла бы быть логика записи в файл (например, с помощью fs.appendFile)
    console.log(`(Записано в ${this.filePath}): ${logEntry.trim()}`);
  }

  // Новый метод, специфичный для дочернего класса
  clearLog() {
    console.log(`Лог-файл ${this.filePath} очищен.`);
  }
}

const appLogger = new FileLogger('APP', './logs/app.log');
appLogger.log('Сервер запущен'); // Использует переопределенный метод
// Вывод: (Записано в ./logs/app.log): [APP] 2024-...: Сервер запущен

const baseLogger = new Logger('BASE');
baseLogger.log('Тестовое сообщение'); // Использует метод родителя
// Вывод: [BASE] Тестовое сообщение

Ключевые аспекты в контексте Node.js:

  • Используется ключевое слово extends для создания иерархии классов.
  • super() вызывается для доступа к конструктору и методам родительского класса.
  • Позволяет создавать специализированные версии общих компонентов (например, разные типы логгеров, обработчиков запросов или подключений к БД).
  • Способствует соблюдению принципа DRY (Don't Repeat Yourself).