#9 – Наследование классов и перечисление

Поділитись

Язык Kotlin обладает облегченным вариантом создания наследования для классов. В уроке вы научитесь реализовывать наследование, а также познакомитесь с перечислениями (enum).

Видеоурок

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

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

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

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

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

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

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

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

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

Пример класса наследника:

open class Transport {
	protected open var speed: Float = 0f
}

class Auto(var speed: Float, var model: String) : Transport() {
	init {
		println("Скорость: $speed, модель - $model")
	}
}

fun main(args: Array<String>) {
	val bmw = Auto(250.5f, "X3M")
	val mercedes = Auto(270f, "C63 AMG")
}

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

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


Поділитись