Классы. Интерфейсы

Классы. Интерфейсы


В главное меню

Интерфейс позволяет перечислить общие свойства и поведение набора классов без их реализации. Эта особенность — что без как — полезна, если наследование не точно отражает отношения между классами в программе.

Используя интерфейсы, группа классов может иметь общие свойства и функции, не наследуя общий суперкласс и не являясь подклассами друг друга.

interface Fightable {
    var healthPoints: Int
    val diceCount: Int
    val diceSides: Int
    val damageRoll: Int

    fun attack(opponent: Fightable): Int
}

Четыре свойства Fightable нигде не инициализируются, а функция attack не имеет тела. Интерфейс не предоставляет инициализаторов или тел функции. Запомните: интерфейс — это что, а не как.

Обратите внимание, что интерфейс Fightable используется как тип параметра opponent, который принимает функция attack. Интерфейс, как и класс, можно использовать как тип параметра.

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

Преимущество перечислений:

-ограниченнее количество

-нет возможности их расширить (через extend)

Пример:

enum class Cru(val level: Int) {
    CRU(80), PREMIER(90), GRAND(100);

    override fun toString() :String {
        return when(this) {
            CRU -> "Base Cru"
            PREMIER -> "Premier Cru"
            GRAND -> "Grand Cru"
        }
    }
}

fun main () {
    val cru = Cru.valueOf("PREMIER")
    Cru.values().forEach { println(it) }
    println(cru)
}


Report Page