🧑🏫07. Наследование
Наследование в программировании — это способ, с помощью которого один класс может "унаследовать" свойства и методы другого класса. Представь себе это как передачу знаний и навыков от одного человека к другому, например, от учителя к ученику или от родителя к ребенку. Благодаря наследованию, можно не дублировать код, а использовать уже готовый, добавляя или изменяя нужные части.
Зачем нужно наследование?
Экономия времени и ресурсов: Можно создать один базовый класс с общими характеристиками и использовать его для других классов.
Упрощение кода: Если несколько классов имеют похожие свойства и методы, их можно унаследовать от одного общего класса, чтобы избежать дублирования кода.
Логическая организация: Наследование помогает структурировать код так, чтобы общие черты группировались в одном месте, а уникальные — добавлялись там, где это нужно.
Пример из жизни
Представь, что у нас есть класс "Транспортное средство". Все транспортные средства имеют общие характеристики: у них есть колеса, скорость, способность перемещаться. Однако есть разные виды транспортных средств: автомобили, велосипеды, поезда и т.д. Вместо того чтобы для каждого из них снова прописывать колеса и скорость, мы создаем класс "Транспортное средство" и наследуем его для создания специфичных классов, таких как "Автомобиль" и "Велосипед".
Как создать наследование?
В 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и унаследовали его для создания конкретных классов.Каждый унаследованный класс получил свойства и методы базового класса и добавил свои уникальные.
Это позволяет не дублировать общие части кода и поддерживать его в порядке.
Пример:
Давай создадим мини-приложение для магазина, где будут разные типы товаров. У нас будут базовые свойства и функции для товара (например, цена, название), а также уникальные для каждого типа товара — например, книги и электроника. Используем наследование, чтобы сделать код проще и избежать повторения.
Структура приложения
Главный экран с товаром, где мы показываем список продуктов.
Детальный экран для просмотра конкретного товара, где видим подробности.
Почему используем наследование?
Мы можем создать базовый класс "Товар" и наследовать его для других классов, таких как Книга и Электроника. Это позволяет нам описать общие свойства и методы (например, 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