Наследование свойств и методов
Часть раздела Объектно-ориентированное программирование путешествия по 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Задание
Создайте класс 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!"В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Объектно-ориентированное программирование
1Объекты и ключевое слово this
Краткий обзор: ОбъектыДобавление методов в объектыПонимание ключевого слова thisФункции-конструкторыКлючевое слово newИтоговое испытание7Наследование и ключевое слово extends
НаследованиеОтношение «is-a»Ключевое слово extendsМетод super()Наследование свойств и методовИтоговое испытание10Полиморфизм
Что такое полиморфизм?Переопределение унаследованных методовИспользование superИтоговое задание13Композиция против наследования
Отношения «has-a» и «is-a»Ограничения глубокого наследованияСоздание объектов2Организация кода
Что такое модули?Экспорт с помощью exportИмпорт с помощью importDefault против именованных экспортов5Инкапсуляция и доступ
ИнкапсуляцияПубличные и приватные поля классовПриватные методыЗадание на повторение8Организация кода ООП
Организация классов в модули11Проект: Отрисовщик фигур
Настройка: Класс Shape и экспортНаследование класса Circle14Система управления библиотекой
Проектирование библиотекиКласс Book с использованием композиции6Проект: Простой банковский счет
Класс BankAccountПополнение и снятие средств9Статические методы и свойства
Уровень класса против уровня экземпляраСтатические свойстваСтатические вспомогательные методыЗадание на закрепление