Абстрактные методы в 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 сделайте абстрактные
методы для получения площади и периметра фигуры.