Классы и конструкторы

Конструкторы и ключевое слово 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