#14 – Наследование в классах

#14 – Наследование в классах

Помимо классов и объектов, ООП содержит дополнительные три основные концепции: наследование, инкапсуляция и полиморфизм. Ранее мы уже знакомились с инкапсуляцией (закрытием данных) и теперь настал черед изучить наследование.

Видеоурок

Наследование является одним из ключевых понятий ООП. За счёт наследования можно создать один общий класс (класс родитель) и создать множество других классов (классы наследники), что будут наследовать все поля, методы и конструкторы из главного класса.


За чем использовать наследование?

Предположим что у нас есть один большой класс «Транспорт». В классе описываются базовые характеристики для всех транспортных средств:

  • поля: скорость, вес, запас хода и тому подобное;
  • методы: получение информации из полей, установка новых значений;
  • конструктор: пустой и по установке всех полей.


На основе класса мы спокойно можем создать объект легковой машины, объект грузовика, объект самолета и так далее. У всех объектов будут одинаковые характеристики и методы. 


Мы явно понимаем, что у объекта машина и самолёт будут разные поля и характеристики. Как можно поступить:

  1. Можно создать два отдельных класса: «Car» и «Airplane». В каждом классе будут все методы, поля и конструкторы повторно переписанные из класса «Транспорт», а также будут новые методы, что важны только для конкретного класса;
  2. Можно создать два класса наследника: «Car» и «Airplane». Оба класса будут наследовать всё от класса «Транспорт» и при этом будут содержать свои дополнительные функции. Таким образом повторения кода не будет и код станет меньше и чище.


Создание классов наследников

Для создания класса наследника требуется создать класс и указать наследование от главного класса.


Пример класса наследника:
// Обычный класс
class Transport {
	protected float speed;
}

// Также обычный класс, но наследует данные от класса Transport
class Auto extends Transport {
	private String model;
 
	Auto (float speed, String model) {
		this.speed = speed;
		this.model = model;
		System.out.println("Скорость: " + speed + ", модель - " + model);
	}
}

public class Main {

	public static void main(String[] args) {
		// Можем ссылаться не только на данные из класса Auto,
		// но также на данные из класса Transport
		Auto bmw = new Auto(250.5f, "X3M");
		Auto mercedes = new Auto(270f, "C63 AMG");
	}
}

Как вы можете заметить, у нас есть одна общая переменная speed. Поскольку модификатор доступа у неё protected, то доступ к переменной мы имеем внутри класса Transport, а также внутри всех классов наследников.


Для создания наследования мы прописали ключевое слово extends после имени класса и указали какой класс будет родительским.


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

Исходный код

Весь код будет доступен после подписки на проект!

Задание к уроку

Необходимо оформить подписку на проект, чтобы получить доступ ко всем домашним заданиям

Большое задание по курсу

Вам необходимо оформить подписку на сайте, чтобы иметь доступ ко всем большим заданиям. В задание входит методика решения, а также готовый проект с ответом к заданию.
PS: подобные задания доступны при подписке от 1 месяца

Также стоит посмотреть

Разработка сайта на Java Spring Boot
7 уроков
Создание динамического веб сайта
22 урока
Уроки React Native для начинающих / Разработка приложения с нуля
11 уроков
Практика React JS / Разработка магазина (eCommerce)
9 уроков
Разработка на Android Studio / Приложение E-Commerce
9 уроков
Изучение стека MEAN: MongoDB, Express, Angular и Node JS
10 уроков
Комментарии
Добавить комментарий

Пока комментариев нет