Конструктор абстрактного класса в Dart
Абстрактный класс может иметь конструктор с параметрами.
Общие данные инициализируют в родителе, а потомок передает значения
через super в своем конструкторе.
Заголовок записи зададим в конструкторе абстрактного Post:
abstract class Post {
Post(this.title);
String title;
String getTitle() => title;
void setTitle(String title) {
this.title = title;
}
abstract void increaseRevenue(int value);
}
Класс Employee принимает заголовок и зарплату, заголовок
передает в конструктор родителя:
class Employee extends Post {
int salary;
Employee(super.title, this.salary);
int getSalary() => salary;
void setSalary(int salary) {
this.salary = salary;
}
@override
void increaseRevenue(int value) {
salary += value;
}
}
При создании объекта вызывается цепочка конструкторов - сначала родитель получает заголовок, затем инициализируются поля потомка:
var employee = Employee("note", 1000);
print(employee.getTitle());
print(employee.getSalary());
В абстрактном классе допустимо тело конструктора - оно выполнится при создании любого конкретного потомка после инициализации параметров:
abstract class Post {
Post(this.title) {
if (title.isEmpty) {
throw ArgumentError("title must not be empty");
}
}
String title;
abstract void increaseRevenue(int value);
}
Класс Note передает заголовок родителю через
super.title:
class Note extends Post {
int likes;
Note(super.title, this.likes);
@override
void increaseRevenue(int value) {
likes += value;
}
int getLikes() => likes;
}
Сделайте абстрактный класс Post
с конструктором, принимающим заголовок записи.
Сделайте класс Employee с конструктором,
принимающим заголовок и зарплату, и передайте заголовок
в конструктор родительского класса.
Сделайте класс Note с конструктором,
принимающим заголовок и число лайков. Передайте заголовок
в конструктор родительского класса и напишите
реализацию абстрактного метода
increaseRevenue.