TGViewer
Flutter Friendly Flutter Friendly @flutterfriendly · 996 subscribers
Post #351 760
💠Привет! Это Анна, Flutter Team Lead Friflex

Слышали про covariant? Как показывает практика, многие о нем слышали, но не до конца понимают, для чего он нужен. Разберемся!

Covariant — это ключевое слово, которое используется для параметров методов. Оно разрешает переопределяющему методу в наследнике сузить тип параметра, указать более конкретный.

Разберем на примере. У нас есть класс Vehicle. Создадим классы более конкретного транспорта — Car и Bike.


class Vehicle {}
class Car extends Vehicle {}
class Bike extends Vehicle {}


Теперь создадим класс Human, который будет реализовывать метод drive c определенным переданным объектом Vehicle.


class Human {
void drive(Vehicle vehicle) {}
}


В таком случае, когда мы захотим создать наследника HumanDriver, мы не сможем уточнить класс транспорта в параметрах drive. Нам придется сделать так:


class Driver extends Human {
@override
void drive(Vehicle vehicle) {} // правильный вариант

@override
void drive(Car vehicle) // вызовет ошибку переопределения
}


И здесь нам на помощь придет covariant. Чтобы он работал, метод drive класса Human нужно видоизменить.


class Human {
void drive(covariant Vehicle vehicle) {}
}


Теперь в реализации Driver легко можно уточнить, какой конкретный тип требуется передать при вызове метода.


class Driver extends Human {
@override
void drive(Car vehicle) {}
}


В таком случае метод drive у Driver принимает только Car, и попытка передать Bike приведет к ошибке типов.


void main() {
final car = Car();
final bike = Bike();
final driver = Driver();

driver.drive(bike); // ошибка argument_type_not_assignable
driver.drive(car); // верное использование
}


❤️ — если было полезно
  • ❤ 44
  • 🔥 8
  • 😍 1
More from @flutterfriendly
  1. May 14, 2026👀Какой сложный вопрос или тема по Flutter вас сейчас беспокоят? Может, задача не идет, ба…
  2. Apr 17, 2026💭Привет! Это Роза, Flutter-разработчица Friflex! Уверена, многие из вас знакомы с Dart De…
  3. Apr 8, 2026Привет, друзья! Делимся нашей страничкой на Хабре, чтобы всегда оставаться на связи. Там е…
  4. Apr 3, 2026🌸Апрель в календаре и на экране Весна зовет обновлять визуальное: убирать темные темы и в…
  5. Apr 1, 2026Всегда с нетерпением ждем этого дня, чтобы сделать подборку ИТ-мемов Пусть поводов для улы…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →