🧑‍🏫07. Наследование

Наследование в программировании — это способ, с помощью которого один класс может "унаследовать" свойства и методы другого класса. Представь себе это как передачу знаний и навыков от одного человека к другому, например, от учителя к ученику или от родителя к ребенку. Благодаря наследованию, можно не дублировать код, а использовать уже готовый, добавляя или изменяя нужные части.

Зачем нужно наследование?

  1. Экономия времени и ресурсов: Можно создать один базовый класс с общими характеристиками и использовать его для других классов.

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

  3. Логическая организация: Наследование помогает структурировать код так, чтобы общие черты группировались в одном месте, а уникальные — добавлялись там, где это нужно.

Пример из жизни

Представь, что у нас есть класс "Транспортное средство". Все транспортные средства имеют общие характеристики: у них есть колеса, скорость, способность перемещаться. Однако есть разные виды транспортных средств: автомобили, велосипеды, поезда и т.д. Вместо того чтобы для каждого из них снова прописывать колеса и скорость, мы создаем класс "Транспортное средство" и наследуем его для создания специфичных классов, таких как "Автомобиль" и "Велосипед".

Как создать наследование?

В Dart (языке, используемом в Flutter) для создания наследования используется ключевое слово extends. Давай сначала создадим базовый класс Transport (Транспортное средство), а потом унаследуем его для создания других классов.

// Базовый класс Transport
class Transport {
  int wheels;
  int speed;

  Transport(this.wheels, this.speed);

  void move() {
    print('Транспортное средство движется со скоростью $speed км/ч');
  }
}

Теперь у нас есть базовый класс Transport. Он описывает общее транспортное средство с колесами и скоростью, а также метод move().

Пример 1: Автомобиль

Унаследуем Transport для создания класса Car (Автомобиль).

Здесь:

  • Класс Car наследует Transport, поэтому он получает wheels, speed, и метод move().

  • Мы добавили свойство brand и метод honk(), уникальные для автомобиля.

Пример 2: Велосипед

Теперь создадим класс Bicycle (Велосипед).

Класс Bicycle также наследует Transport, получает все его свойства и методы и добавляет свои, такие как hasBasket и метод ringBell().

Пример 3: Самолет

Создадим класс Airplane (Самолет).

Здесь:

  • Самолет наследует Transport, но устанавливает количество колес равным нулю.

  • Добавляет уникальное свойство wings и метод fly().

Пример 4: Поезд

Создадим класс Train (Поезд).

Поезд наследует Transport, но добавляет уникальное свойство carriages и метод chooChoo().

Пример 5: Корабль

Создадим класс Ship (Корабль).

Корабль также наследует Transport, но добавляет свое уникальное свойство sails и метод sail().

Полный пример

Теперь мы можем создать объекты разных классов и вызывать их методы:

В результате:

  • Мы создали один базовый класс Transport и унаследовали его для создания конкретных классов.

  • Каждый унаследованный класс получил свойства и методы базового класса и добавил свои уникальные.

  • Это позволяет не дублировать общие части кода и поддерживать его в порядке.

Пример:

Давай создадим мини-приложение для магазина, где будут разные типы товаров. У нас будут базовые свойства и функции для товара (например, цена, название), а также уникальные для каждого типа товара — например, книги и электроника. Используем наследование, чтобы сделать код проще и избежать повторения.

Структура приложения

  1. Главный экран с товаром, где мы показываем список продуктов.

  2. Детальный экран для просмотра конкретного товара, где видим подробности.

Почему используем наследование?

Мы можем создать базовый класс "Товар" и наследовать его для других классов, таких как Книга и Электроника. Это позволяет нам описать общие свойства и методы (например, price, name, showDetails()), которые будут у всех товаров, и добавить уникальные свойства только для каждого конкретного типа товара.

Шаг 1: Создание классов с наследованием

Базовый класс Product

  • Product — это базовый класс "Товар", который имеет name и price, а также метод showDetails(), который выводит название и цену.

Наследуемые классы для конкретных товаров

  1. Класс для книг

  • Book наследует Product, а также добавляет свойство author и переопределяет метод showDetails(), чтобы показать автора.

  1. Класс для электроники

  • Electronics наследует Product, добавляя уникальное свойство brand для бренда устройства.

Шаг 2: Главный экран со списком товаров

Теперь создадим главный экран в Flutter с ListView, который отображает все товары.

  • В ProductListScreen мы создали список products с объектами Book и Electronics.

  • Когда пользователь нажимает на товар, его отправляют на ProductDetailScreen.

Шаг 3: Детальный экран продукта

Теперь создадим экран для показа подробностей о товаре.

  • ProductDetailScreen принимает товар product и показывает его название и цену.

  • По нажатию кнопки выводятся детали товара в консоль.

Полный код

Объяснение кода

  1. Product — базовый класс для всех товаров. В нем общие свойства name и price и метод showDetails.

  2. Book и Electronics наследуют Product, добавляя уникальные свойства author и brand.

  3. Наследование помогает не дублировать общие свойства для каждого товара.

  4. Экран ProductListScreen показывает список товаров, а ProductDetailScreen выводит детали выбранного товара.

Это приложение помогает видеть, как наследование упрощает код и делает его более структурированным.

Last updated