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

Смешанная практика ООП в Kotlin

Сделайте data class Line с полями sku и price. Сделайте open class Cart с методом total(lines: List<Line>): Int. Сделайте DiscountCart, который возвращает сумму price минус 10, но не ниже 0. Дан список:

val items = listOf( Line("a", 30), Line("b", 5), )

Выведите итог для Cart и для DiscountCart.

Сделайте sealed class Auth с вариантами Guest как object и User с полем name: String. Сделайте интерфейс Greeter с методом fun greet(): String. Сделайте класс Portal(a: Auth) : Greeter, который возвращает "hello guest" или "hello " и имя. Выведите оба варианта.

Даны типы:

interface HasArea { val area: Double } data class Rect(val w: Double, val h: Double) : HasArea { override val area: Double = w * h } enum class UnitTag { PLAIN, MARKED }

Соберите список HasArea из двух Rect и одной анонимной реализации с area = 1.0. Выведите сумму площадей и значение UnitTag.MARKED.

Сделайте абстрактный класс Storage с абстрактным методом abstract fun size(): Int. Сделайте ListStorage, который оборачивает список строк. В companion object Storage храните счётчик созданных хранилищ. Создайте два ListStorage, выведите счётчик и оба size().

Сделайте интерфейс Clock с методом fun now(): String. Сделайте FixedClock(private val t: String) : Clock и ClockView(c: Clock) : Clock by c. Сделайте анонимную обёртку над ClockView, которая дописывает "!" к now(). Выведите время для "09:00".

В пакете billing сделайте data class Invoice с полями id и sum. В том же пакете сделайте object Registry с картой Long - Invoice. Запишите счёт 1 на сумму 100, прочитайте по id и выведите sum.

Сделайте enum class Role с константами VIEWER и EDITOR. Сделайте открытый класс Account с параметром конструктора role: Role и открытым методом canEdit(), который возвращает true только для Role.EDITOR. Сделайте класс AdminAccount, наследующий Account(Role.EDITOR) и переопределяющий canEdit() так, чтобы метод всегда возвращал true. Выведите три результата canEdit(): Account(Role.VIEWER), Account(Role.EDITOR), AdminAccount().

Дан класс:

import kotlin.properties.Delegates class Profile(map: Map<String, Any?>) { val city: String by map var score: Int by Delegates.observable(0) { _, _, v -> if (v > 10) city } }

Исправьте класс: при росте score выше 10 на экран должна выводиться строка city. Проверьте на карте mapOf("city" to "Rome") и присвоениях 5, 11.

Сделайте sealed class Msg с вариантами Text(body: String) и Ping как object. Сделайте class Inbox, который хранит List<Msg> и метод textCount(): Int - число сообщений Text. Дан inbox из Ping, Text("a"), Text("b"). Выведите счётчик.

Сделайте интерфейс Ident с полем val id: Long. Сделайте data class Task(override val id: Long, val title: String) : Ident. Напишите функцию pickTitle(list: List<Ident>, id: Long): String?, которая находит заголовок задачи по id. Дан список из двух Task. Выведите заголовок для id = 2 и для id = 9.

Сделайте data class Version(major, minor). Сделайте object Release, который хранит Version? и метод set(v: Version). Сделайте open class Tool { open fun label(): String = "tool" }. Сделайте VersionTool : Tool(), который выводит "tool " и major из текущего Release, если версия задана, иначе "tool ?". Установите Version(2, 1) и выведите label().

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