Ключевое слово super
Ключевое слово super применяется внутри дочернего класса
для обращения к методам, свойствам и конструкторам
родительского класса. Оно позволяет вызывать
переопределённые методы родителя, получать доступ
к его полям и передавать аргументы в его конструктор.
Чаще всего super используется в конструкторах
для инициализации полей, объявленных в базовом классе,
а также при переопределении методов, когда нужно
дополнить поведение родителя, а не полностью его заменить.
Синтаксис
super.member
super.method()
super.namedConstructor()
super(positionalArgs)
super.namedArgs
Пример
Давайте создадим базовый класс Animal
и дочерний класс Dog, который через
super передаёт аргумент в конструктор родителя:
class Animal
{
String name;
Animal(this.name);
void show()
{
print('Animal: $name');
}
}
class Dog extends Animal
{
Dog(String name) : super(name);
}
void main()
{
Dog dog = Dog('abcde');
dog.show();
}
Результат выполнения кода:
"Animal: abcde"
Пример
Давайте переопределим метод show в дочернем
классе и вызовем через super реализацию родителя:
class Animal
{
String name;
Animal(this.name);
void show()
{
print('Animal: $name');
}
}
class Dog extends Animal
{
Dog(String name) : super(name);
@override
void show()
{
super.show();
print('Dog: $name');
}
}
void main()
{
Dog dog = Dog('abcde');
dog.show();
}
Результат выполнения кода:
"Animal: abcde"
"Dog: abcde"
Пример
Давайте обратимся через super к свойству
родительского класса внутри дочернего:
class Animal
{
String name = 'abcde';
}
class Dog extends Animal
{
void show()
{
print(super.name);
}
}
void main()
{
Dog dog = Dog();
dog.show();
}
Результат выполнения кода:
"abcde"
Пример
Давайте вызовем через super именованный
конструктор родительского класса:
class Animal
{
String name;
int age;
Animal(this.name, this.age);
Animal.unknown() : name = 'abcde', age = 0;
}
class Dog extends Animal
{
Dog() : super.unknown();
}
void main()
{
Dog dog = Dog();
print(dog.name);
print(dog.age);
}
Результат выполнения кода:
"abcde"
0