Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗ktOpAbCn 49 of 123 menu
◀ ▶

Конструктор абстрактного класса в Kotlin

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

Имя пользователя зададим в конструкторе абстрактного User:

abstract class User(protected var name: String) { fun getName(): String = name fun setName(name: String) { this.name = name } abstract fun increaseRevenue(value: Int) }

Класс Employee принимает имя и зарплату, имя передаёт в конструктор родителя:

class Employee( name: String, private var salary: Int ) : User(name) { fun getSalary(): Int = salary fun setSalary(salary: Int) { this.salary = salary } override fun increaseRevenue(value: Int) { salary += value } }

При создании объекта вызывается цепочка конструкторов - сначала родитель получает name, затем инициализируются поля потомка:

fun main() { val employee = Employee("john", 1000) println(employee.getName()) println(employee.getSalary()) }

В абстрактном классе допустим блок init - он выполнится при создании любого конкретного потомка после инициализации параметров конструктора:

abstract class User(protected var name: String) { init { require(name.isNotEmpty()) { "name must not be empty" } } abstract fun increaseRevenue(value: Int) }

Если потомок объявляет свой первичный конструктор, параметры родителя перечисляют в заголовке наследования после двоеточия:

class Student( name: String, private var scholarship: Int ) : User(name) { override fun increaseRevenue(value: Int) { scholarship += value } fun getScholarship(): Int = scholarship }

Сделайте абстрактный класс User с конструктором, принимающим имя пользователя. Сделайте класс Employee с конструктором, принимающим имя и зарплату, и передайте имя в конструктор родительского класса.

Сделайте класс Student с конструктором, принимающим имя и стипендию. Передайте имя в конструктор родительского класса и напишите реализацию абстрактного метода increaseRevenue.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить