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

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

Кроме методов, в абстрактном классе можно объявить абстрактное свойство. У него нет инициализатора в родителе - только имя и тип. Конкретный потомок обязан определить свойство и указать override.

Абстрактное свойство в объявлении класса выглядит так:

abstract class Figure { abstract val area: Double abstract val perimeter: Double }

В Circle радиус хранят в конструкторе, а площадь и периметр считают в переопределённых свойствах:

class Circle(private val radius: Double) : Figure() { override val area: Double get() = Math.PI * radius * radius override val perimeter: Double get() = 2 * Math.PI * radius }

У Rectangle задают ширину и высоту, формулы те же - через геттеры:

class Rectangle( private val width: Double, private val height: Double ) : Figure() { override val area: Double get() = width * height override val perimeter: Double get() = 2 * (width + height) }

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

abstract class Counter { abstract var count: Int } class SimpleCounter : Counter() { override var count: Int = 0 }

Сделайте абстрактный класс Figure с абстрактными свойствами area и perimeter. Сделайте класс Square, принимающий длину стороны в конструкторе, и реализуйте в нем оба абстрактных свойства.

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