Абстрактный геттер в Dart
Кроме методов, в абстрактном классе можно объявить абстрактный
геттер. У него нет тела в родителе - только имя и тип.
Конкретный потомок обязан определить геттер и указать
@override.
Абстрактный геттер в объявлении класса выглядит так:
abstract class Figure {
double get area;
double get perimeter;
}
В Circle радиус хранят в конструкторе, а площадь и
периметр считают в переопределенных геттерах:
import 'dart:math';
class Circle extends Figure {
double radius;
Circle(this.radius);
@override
double get area => pi * radius * radius;
@override
double get perimeter => 2 * pi * radius;
}
У Rectangle задают ширину и высоту, формулы те же - через
геттеры:
class Rectangle extends Figure {
double width;
double height;
Rectangle(this.width, this.height);
@override
double get area => width * height;
@override
double get perimeter => 2 * (width + height);
}
Абстрактным может быть и геттер для изменяемого значения - тогда в родителе пишут объявление без тела, а в потомке хранят поле или задают геттер и сеттер:
abstract class Counter {
int get count;
set count(int value);
}
class SimpleCounter extends Counter {
int _count = 0;
@override
int get count => _count;
@override
set count(int value) {
_count = value;
}
}
У записи заголовок часто задают через абстрактный геттер в
Post, а в Note возвращают значение поля:
abstract class Post {
String get title;
}
class Note extends Post {
String _title;
Note(this._title);
@override
String get title => _title;
}
Сделайте абстрактный класс Figure
с абстрактными геттерами area
и perimeter. Сделайте класс
Square, принимающий длину стороны
в конструкторе, и реализуйте в нем оба
абстрактных геттера.