Menu
Coddy logo textTech

Наследование свойств и методов

Часть раздела Объектно-ориентированное программирование путешествия по JavaScript на Coddy — урок 28 из 56.

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

Давайте создадим родительский класс со свойствами и методами:

class Animal {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  
  eat() {
    return `${this.name} is eating`;
  }
  
  sleep() {
    return `${this.name} is sleeping`;
  }
}

Теперь давайте создадим дочерний класс, который наследуется от Animal:

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

Создайте экземпляр класса Dog:

const rex = new Dog("Rex", 3, "German Shepherd");

Теперь, хотя мы и не определяли eat() и sleep() в классе Dog, мы все равно можем использовать эти методы:

console.log(rex.eat());  // Выводит: Rex is eating
console.log(rex.sleep()); // Выводит: Rex is sleeping

И мы можем получить доступ ко всем унаследованным свойствам:

console.log(rex.name);  // Выводит: Rex
console.log(rex.age);   // Выводит: 3
console.log(rex.breed); // Выводит: German Shepherd
challenge icon

Задание

Создайте класс Cake, который расширяет Dessert, и экспортируйте его. Класс Cake должен иметь:

  • Все унаследованные свойства и методы от Dessert
  • Новое свойство flavor
  • Новый метод addCandles(), который возвращает строку “Added candles to ${this.name}!”

Шпаргалка

Дочерние классы наследуют все свойства и методы от своего родительского класса с помощью ключевого слова extends:

class Animal {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  
  eat() {
    return `${this.name} is eating`;
  }
  
  sleep() {
    return `${this.name} is sleeping`;
  }
}

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

const rex = new Dog("Rex", 3, "German Shepherd");
console.log(rex.eat());  // Rex is eating
console.log(rex.name);   // Rex
console.log(rex.breed);  // German Shepherd

Дочерний класс может обращаться ко всем унаследованным свойствам и методам без их переопределения.

Попробуйте сами

import { Dessert } from './desserts.js';
import { Cake } from './desserts.js';

// Тестовый код — не изменять
const myCake = new Cake("Birthday Cake", 300, "Chocolate");
console.log(myCake.describe());   // Должно вывести "Birthday Cake has 300 calories"
console.log(myCake.flavor);       // Должно вывести "Chocolate"
console.log(myCake.addCandles()); // Должно вывести "Added candles to Birthday Cake!"
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Объектно-ориентированное программирование