Проверяет понимание наследования и механизма вызова родительского конструктора в объектно-ориентированных языках, что важно для корректной инициализации базового состояния.
При наследовании дочерний класс расширяет родительский, но не заменяет его инициализацию. Родительский конструктор отвечает за создание и настройку той части объекта, которая описана в базовом классе. Поэтому перед выполнением логики дочернего конструктора нужно гарантировать, что базовое состояние уже корректно установлено.
В языках с явным вызовом родительского конструктора (Java, C#, Python, JavaScript) используется специальное ключевое слово: super или base. Вызов должен идти до обращения к this, иначе компилятор или среда выполнения выдаст ошибку.
// Java
class Animal {
Animal(String name) { this.name = name; }
}
class Dog extends Animal {
Dog(String name, String breed) {
super(name); // вызов родительского конструктора
this.breed = breed;
}
}
# Python
class Animal:
def __init__(self, name):
self.name = name
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name)
self.breed = breed
// JavaScript
class Animal {
constructor(name) { this.name = name; }
}
class Dog extends Animal {
constructor(name, breed) {
super(name);
this.breed = breed;
}
}
super() можно опустить — он произойдёт автоматически.Dog::Dog(string n) : Animal(n) { ... }.base(...) после сигнатуры конструктора: public Dog(string n) : base(n) { }.Итог: вызов родительского конструктора нужен, чтобы объект был полностью и корректно инициализирован. Применяйте его всегда, когда базовый класс требует обязательных параметров или выполняет важную настройку.
Уровень
Рейтинг:
4
Сложность:
2
Навыки
JavaScript
Java
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию