07. Наследование
Наследование в программировании — это способ, с помощью которого один класс может "унаследовать" свойства и методы другого класса. Представь себе это как передачу знаний и навыков от одного человека к другому, например, от учителя к ученику или от родителя к ребенку. Благодаря наследованию, можно не дублировать код, а использовать уже готовый, добавляя или изменяя нужные части.
Зачем нужно наследование?
Экономия времени и ресурсов: Можно создать один базовый класс с общими характеристиками и использовать его для других классов.
Упрощение кода: Если несколько классов имеют похожие свойства и методы, их можно унаследовать от одного общего класса, чтобы избежать дублирования кода.
Логическая организация: Наследование помогает структурировать код так, чтобы общие черты группировались в одном месте, а уникальные — добавлялись там, где это нужно.
Пример из жизни
Представь, что у нас есть класс "Транспортное средство". Все транспортные средства имеют общие характеристики: у них есть колеса, скорость, способность перемещаться. Однако есть разные виды транспортных средств: автомобили, велосипеды, поезда и т.д. Вместо того чтобы для каждого из них снова прописывать колеса и скорость, мы создаем класс "Транспортное средство" и наследуем его для создания специфичных классов, таких как "Автомобиль" и "Велосипед".
Как создать наследование?
В Dart (языке, используемом в Flutter) для создания наследования используется ключевое слово extends
. Давай сначала создадим базовый класс Transport
(Транспортное средство), а потом унаследуем его для создания других классов.
Теперь у нас есть базовый класс 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
и унаследовали его для создания конкретных классов.Каждый унаследованный класс получил свойства и методы базового класса и добавил свои уникальные.
Это позволяет не дублировать общие части кода и поддерживать его в порядке.
Пример:
Давай создадим мини-приложение для магазина, где будут разные типы товаров. У нас будут базовые свойства и функции для товара (например, цена, название), а также уникальные для каждого типа товара — например, книги и электроника. Используем наследование, чтобы сделать код проще и избежать повторения.
Структура приложения
Главный экран с товаром, где мы показываем список продуктов.
Детальный экран для просмотра конкретного товара, где видим подробности.
Почему используем наследование?
Мы можем создать базовый класс "Товар" и наследовать его для других классов, таких как Книга и Электроника. Это позволяет нам описать общие свойства и методы (например, price
, name
, showDetails()
), которые будут у всех товаров, и добавить уникальные свойства только для каждого конкретного типа товара.
Шаг 1: Создание классов с наследованием
Базовый класс Product
Product
— это базовый класс "Товар", который имеетname
иprice
, а также методshowDetails()
, который выводит название и цену.
Наследуемые классы для конкретных товаров
Класс для книг
Book
наследуетProduct
, а также добавляет свойствоauthor
и переопределяет методshowDetails()
, чтобы показать автора.
Класс для электроники
Electronics
наследуетProduct
, добавляя уникальное свойствоbrand
для бренда устройства.
Шаг 2: Главный экран со списком товаров
Теперь создадим главный экран в Flutter с ListView
, который отображает все товары.
В
ProductListScreen
мы создали списокproducts
с объектамиBook
иElectronics
.Когда пользователь нажимает на товар, его отправляют на
ProductDetailScreen
.
Шаг 3: Детальный экран продукта
Теперь создадим экран для показа подробностей о товаре.
ProductDetailScreen
принимает товарproduct
и показывает его название и цену.По нажатию кнопки выводятся детали товара в консоль.
Полный код
Объяснение кода
Product
— базовый класс для всех товаров. В нем общие свойстваname
иprice
и методshowDetails
.Book
иElectronics
наследуютProduct
, добавляя уникальные свойстваauthor
иbrand
.Наследование помогает не дублировать общие свойства для каждого товара.
Экран
ProductListScreen
показывает список товаров, аProductDetailScreen
выводит детали выбранного товара.
Это приложение помогает видеть, как наследование упрощает код и делает его более структурированным.
Last updated