JavaRush /Курсы /Модуль 1: Web Core /Наследование классов

Наследование классов

Модуль 1: Web Core
20 уровень , 6 лекция
Открыта

7.1 Основы наследования

Наследование классов в JavaScript позволяет создавать новые классы на основе уже существующих, переиспользуя и расширяя их функциональность. Это ключевой аспект объектно-ориентированного программирования (ООП), который позволяет создавать иерархии классов и управлять поведением объектов.

Для наследования классов используется ключевое слово extends. Класс, который наследует другой класс, называется производным классом (subclass), а класс, от которого производится наследование, называется базовым классом (superclass).

Пример:

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        speak() {
          console.log(`${this.name} barks.`);
        }
      }

      const dog = new Dog('Rex');
      dog.speak(); // "Rex barks."
    
  

Объяснение:

  • Класс Animal является базовым классом с конструктором и методом speak()
  • Класс Dog наследует Animal и переопределяет метод speak()
  • Экземпляр dog класса Dog использует переопределенный метод speak()

7.2 Ключевое слово super

Ключевое слово super используется для вызова конструктора или методов базового класса из производного класса.

1. Вызов конструктора базового класса

Производный класс должен вызвать конструктор базового класса с использованием super() перед использованием this.

Пример:

Конструктор Dog вызывает super(name), чтобы инициализировать свойство name базового класса Animal.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        constructor(name, breed) {
          super(name);
          this.breed = breed;
        }

        speak() {
          console.log(`${this.name} barks.`);
        }
      }

      const dog = new Dog('Rex', 'Labrador');
      console.log(dog.name); // "Rex"
      console.log(dog.breed); // "Labrador"
      dog.speak(); // "Rex barks."
    
  

2. Вызов методов базового класса

Методы базового класса могут быть вызваны из производного класса с использованием super.

Пример:

Метод speak() класса Dog вызывает метод speak() базового класса Animal с использованием super.speak(), а затем выполняет собственную логику.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        speak() {
          super.speak(); // Вызов метода базового класса
          console.log(`${this.name} barks.`);
        }
      }

      const dog = new Dog('Rex');
      dog.speak();

      // "Rex makes a noise."
      // "Rex barks."
    
  

7.3 Наследование и переопределение методов

Наследование позволяет производным классам переопределять методы базового класса. Это дает возможность изменять или расширять функциональность методов.

Пример:

Метод speak() класса Dog переопределяет метод speak() базового класса Animal, предоставляя собственную реализацию.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        speak() {
          console.log(`${this.name} barks.`);
        }
      }

      const animal = new Animal('Generic Animal');
      animal.speak(); // "Generic Animal makes a noise."

      const dog = new Dog('Rex');
      dog.speak(); // "Rex barks."
    
  

7.4 Наследование и дополнительные методы

Производный класс может добавлять новые методы, которые не существуют в базовом классе.

Пример:

Класс Dog добавляет новый метод fetch(), который не существует в базовом классе Animal.

JavaScript
    
      class Animal {
        constructor(name) {
          this.name = name;
        }

        speak() {
          console.log(`${this.name} makes a noise.`);
        }
      }

      class Dog extends Animal {
        speak() {
          console.log(`${this.name} barks.`);
        }

        fetch() {
          console.log(`${this.name} is fetching.`);
        }
      }

      const dog = new Dog('Rex');
      dog.speak(); // "Rex barks."
      dog.fetch(); // "Rex is fetching."
    
  

7.5 Проверка наследования

Для проверки наследования можно использовать оператор instanceof и метод isPrototypeOf().

Пример:

Оператор instanceof проверяет, является ли объект экземпляром класса. Метод isPrototypeOf() проверяет, является ли прототип объекта частью цепочки прототипов другого объекта.

JavaScript
    
      console.log(dog instanceof Dog); // true
      console.log(dog instanceof Animal); // true
      console.log(Animal.prototype.isPrototypeOf(Dog.prototype)); // true
    
  
1
Задача
Модуль 1: Web Core, 20 уровень, 6 лекция
Недоступна
Наследование с super
Наследование с super
1
Задача
Модуль 1: Web Core, 20 уровень, 6 лекция
Недоступна
Метод hunt в Predator
Метод hunt в Predator
Комментарии (4)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Александр Уровень 47
19 декабря 2024
вопросы по материалу лекции 12 в опросе после лекции 11 это так задумано ?
19 января 2025
я выгорел с этого )
Roman Уровень 2
15 мая 2025
Не в первые уже 😬
Ivan Уровень 59
26 мая 2025
Это база!