Ответ
extends — это ключевое слово в Dart, используемое для создания подкласса (наследника) от другого класса (суперкласса или родителя). Наследник получает все публичные и защищенные (protected через конвенцию _) поля и методы родителя, может их переопределять и добавлять новые.
Основные принципы:
- Одиночное наследование: Класс может наследовать только от одного суперкласса.
- Переопределение методов: Используется аннотация
@override. - Конструкторы: Конструктор родителя вызывается с помощью
super()в теле конструктора наследника.
Практический пример из Flutter: Создание кастомного виджета с дополнительной логикой.
// Базовый класс для всех экранов в приложении
abstract class BaseScreen extends StatelessWidget {
final String screenTitle;
const BaseScreen({required this.screenTitle, Key? key}) : super(key: key);
// Общий метод для всех экранов
AppBar buildAppBar(BuildContext context) {
return AppBar(
title: Text(screenTitle),
centerTitle: true,
);
}
// Абстрактный метод, который должны реализовать наследники
Widget buildBody(BuildContext context);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: buildAppBar(context),
body: buildBody(context),
);
}
}
// Конкретный экран, наследующий общую структуру
class HomeScreen extends BaseScreen {
const HomeScreen({Key? key}) : super(screenTitle: 'Главная', key: key);
@override
Widget buildBody(BuildContext context) {
return Center(
child: ElevatedButton(
onPressed: () {},
child: Text('Действие'),
),
);
}
// Можно переопределить и метод родителя
@override
AppBar buildAppBar(BuildContext context) {
final defaultAppBar = super.buildAppBar(context);
return AppBar(
title: defaultAppBar.title,
actions: [IconButton(onPressed: () {}, icon: Icon(Icons.settings))],
);
}
}
Итог: extends — фундаментальный механизм для повторного использования кода и построения иерархий в объектно-ориентированном Dart.