Классы и конструкторы
Конструкторы и ключевое слово super
В отличие от полей и методов конструкторы базового класса не наследуются. Если базовый класс явным образом определяет конструктор (конструктор по умолчанию не учитывается), то его необходимо вызвать в классе-наследнике при определении конструктора:
void main (){
Employee bob = Employee("Bob");
bob.display();
}
class Person{
String name = "";
Person(this.name);
void display(){
print("Name: $name");
}
}
class Employee extends Person{
Employee(String name) : super(name);
}
Здесь базовый класс Person определяет конструктор, который принимает один параметр. В производном классе Employee также определяется конструктор, который вызывает конструктор базового класса, передавая ему значение параметра name. Для обращения к функциональности базового класса из производного применяется ключевое слово super. В частности, вызов super(name)
фактически будет представлять обращение к конструктору базового класса Person(name)
.
Если мы не вызовем конструктор базового класса при определении конструктора в производном классе, то мы столкнемся с ошибкой.
Подобным образом можно переопределять и обращаться к именованным конструкторам базового класса:
void main (){
Employee bob = Employee.byAgeNameConstructor("Bob", 45);
bob.display();
}
class Person{
String name = "";
int age = 0;
Person(this.name){
age = 18;
}
Person.byAgeNameConstructor(this.name, this.age);
void display(){
print("Name: $name Age: $age");
}
}
class Employee extends Person{
Employee(String name) : super(name);
Employee.byAgeNameConstructor(String name, int age) : super.byAgeNameConstructor(name, age);
}
Last updated