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

Абстрактные методы в Kotlin

В абстрактном классе можно объявить абстрактный метод - без тела, только с сигнатурой. Такой метод задаёт контракт: каждый конкретный потомок обязан дать свою реализацию с ключевым словом override.

Абстрактный метод помечают словом abstract перед fun. Тело не пишут, после сигнатуры стоит только точка с запятой или открывающая фигурная скобка отсутствует:

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

Родитель не знает, что именно увеличивать у потомка - зарплату у Employee или стипендию у Student. Поэтому реализацию пишут в наследниках. Пока хотя бы один потомок не переопределит абстрактный метод, класс-потомок остаётся абстрактным или код не компилируется.

Реализация в классе Employee:

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

Тот же метод в Student увеличивает стипендию:

class Student : User() { private var scholarship: Int = 0 fun getScholarship(): Int = scholarship fun setScholarship(scholarship: Int) { this.scholarship = scholarship } override fun increaseRevenue(value: Int) { scholarship += value } }

Проверка работы на объекте сотрудника:

fun main() { val employee = Employee() employee.setName("john") employee.setSalary(1000) employee.increaseRevenue(100) println(employee.getSalary()) }

Добавьте в ваш класс User такой же абстрактный метод increaseRevenue. Напишите реализацию этого метода в классах Employee и Student.

В классе Figure сделайте абстрактные методы для получения площади и периметра фигуры.

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