Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗dtOpAbCC 48 of 113 menu
◀ ▶

Общий код в абстрактном классе в Dart

Абстрактный класс не обязан состоять только из абстрактных методов. В одном типе удобно держать и общий код с реализацией, и объявления без тела, которые потомки должны дописать сами.

Общие поля и методы родителя наследуются как у обычного класса. Абстрактные члены задают, что именно каждый потомок обязан реализовать:

abstract class Post { String title = ""; int likes = 0; String getTitle() => title; void setTitle(String title) { this.title = title; } void showTitle() { print(title); } abstract void increaseRevenue(int value); }

Метод showTitle уже имеет тело - его не переопределяют в Employee и Note, а просто вызывают. Метод increaseRevenue в каждом потомке свой:

class Employee extends Post { int salary = 0; @override void increaseRevenue(int value) { salary += value; } int getSalary() => salary; } class Note extends Post { @override void increaseRevenue(int value) { likes += value; } }

Конкретный метод с телом в абстрактном классе можно вызывать у любого потомка. Например, общий вывод заголовка записи:

abstract class Post { String title = ""; void show() { print(title); } } class Note extends Post {}

В абстрактном классе допустимы приватные вспомогательные методы - их видят только методы того же файла. Публичная логика родителя может пользоваться ими при проверке данных:

abstract class Post { String _title = ""; bool _isNotEmpty(String text) { return text.isNotEmpty; } void setTitle(String title) { if (_isNotEmpty(title)) { _title = title; } } String getTitle() => _title; String roleLabel(); } class Employee extends Post { @override String roleLabel() => "employee"; }

Сделайте абстрактный класс Figure с методом describe, который выводит на экран площадь и периметр фигуры. Сделайте геттеры area и perimeter абстрактными. Реализуйте класс Circle.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить