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

Общий код в абстрактном классе Kotlin

Абстрактный класс не обязан состоять только из абстрактных методов. В одном типе удобно держать и общий код с реализацией, и объявления без тела, которые потомки должны дописать сами.

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

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

Метод printName уже имеет тело - его не переопределяют в Employee и Student, а просто вызывают. Метод increaseRevenue в каждом потомке свой:

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

В абстрактном классе допустимы приватные вспомогательные методы - их видят только методы того же класса, потомки к ним не обращаются снаружи, но могут пользоваться публичной логикой родителя:

abstract class User { private var name: String = "" protected fun isNotEmpty(text: String): Boolean { return text.isNotEmpty() } fun setName(name: String) { if (isNotEmpty(name)) { this.name = name } } fun getName(): String = name abstract fun roleLabel(): String } class Employee : User() { override fun roleLabel(): String = "employee" }

Модификатор protected у метода родителя позволяет вызывать его из тела потомка, но не из произвольного кода снаружи класса.

Сделайте абстрактный класс Figure с методом describe, который выводит на экран площадь и периметр фигуры. Сделайте свойства area и perimeter абстрактными. Реализуйте класс Circle.

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