Ответ
В Dart и абстрактные классы, и интерфейсы используются для определения контрактов, но с разной степенью гибкости и реализации.
Абстрактный класс (abstract class)
- Может содержать как абстрактные методы (без тела), так и реализованные методы, поля, конструкторы.
- Поддерживает одиночное наследование (класс может
extendsтолько один абстрактный класс). -
Идеален для создания шаблона с частичной готовой реализацией.
abstract class DataRepository { // Поле с реализацией final String endpoint = '/api/data'; // Абстрактный метод (контракт) Future<List<dynamic>> fetchAll(); // Реализованный метод (общая логика) void logError(String error) { print('Repository error: $error'); } }
class UserRepository extends DataRepository {
@override
Future<List
### Интерфейс
* В Dart **любой класс неявно определяет интерфейс**. Ключевого слова `interface` нет.
* Для реализации интерфейса используется `implements`.
* Класс может реализовать **несколько** интерфейсов.
* При реализации **обязан предоставить свою реализацию ВСЕХ** публичных членов этого класса (и методов, и полей).
```dart
// Классы, которые мы используем как интерфейсы
class JsonSerializable {
String toJson() => ''; // Сигнатура метода
}
class Identifiable {
final int id;
Identifiable(this.id); // Даже поле и конструктор должны быть переопределены
}
// Класс реализует два интерфейса
class User implements JsonSerializable, Identifiable {
@override
int id; // Поле должно быть объявлено
@override
String toJson() => '{"id": $id}'; // Метод должен быть реализован
// Конструктор также нужно объявить
User(this.id);
}
Практическое правило в Dart:
- Используйте
abstract classсextends, когда вам нужна общая базовая логика и отношение "является". - Используйте
implements, когда вам нужна только сигнатура (контракт) или множественное "наследование" поведения.
Видео-ответы
▶
Публичное собеседование: QA Automation Lead
▶
Собеседование Frontend Angular 415 gross + 20% премии
▶
Java разработчик проходит собеседование в бигтех на Middle позицию
▶
Middle Java разработчик удивил на собеседовании знаниями уровня Senior!
▶
Успешное собеседование Middle Java в холдинг T1
▶
Собеседование Laravel PHP backend разработчика middle-senior. Тренировка к собеседованию
▶
обеседование в Oracle на Middle Java
▶
Парень стал программистом в 33 года, а в 36 уже крепкий миддл?? / Техсобес Middle Python Developer
▶
Легчайшее JAVA собеседование в моей жизни
▶
Открытое собеседование PHP Middle
▶
Открытое собеседование на PHP Мидл разработчика
▶
Открытое собеседование на PHP Мидл разработчика
▶
РЕАЛЬНОЕ СОБЕСЕДОВАНИЕ НА BACKEND РАЗРАБОТЧИКА ПОЛУЧИЛ ЗП 280К ЗАВАЛИВ ПОЛОВИНУ ТЕХНИЧЕСКИХ ВОПРОСОВ
▶
Собеседование Middle PHP разработчика
▶
Как проходит Java-интервью в 2025 | Живое собеседование, ошибки и советы
▶
Собеседование ученика на Frontend-разработчика в Риглу - Часть 2
▶
Собес на стажика с таймтрекером, пишущего на dotnet ಠ_ಠ #net #csharp
▶
Собеседование Laravel PHP backend разработчика junior. Тренировка к собеседованию
▶
Собеседование PHP, Тильда паблишинг
▶
Проверяем знания перед реальными собеседованиями | Техническое собеседование Java Kotlin | Jetbulb
▶
Unity Developer Собеседование C#. Тренировочное интервью на вакансию с актуальными вопросами
▶
Собеседование PHP, весна 2024, АО Тривио
▶
Собеседование на позицию Unity Developer. C#. Тренировочный собес. Актуальные вопросы
▶
ПРОБНОЕ СОБЕСЕДОВАНИЕ C# Junior программиста
▶
Собеседование на .NET разработчика (backend)
▶
Гриша Скобелев, Артур Власов: Публичное собеседование Junior Software Engineer
▶
Тестовое собеседование C# | .NET Junior Mock interview