Шаг 194.
Основы Kotlin.
Интерфейсы и абстрактные классы. Объявление интерфейса

    На этом шаге мы рассмотрим объявление интерфейса.

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

    Создайте новый файл с именем Creature.kt в пакете com.bignerdranch.nyethack (этот прием помогает избежать коллизии имен) и, используя ключевое слово interface, объявите интерфейс Fightable.

package com.bignerdranch.nyethack

interface Fightable {
    var healthPoints: Int
    val diceCount: Int
    val diceSides: Int
    val damageRoll: Int
    fun attack(opponent: Fightable): Int
}


Рис.1. Объявление интерфейса (Creature.kt)

    Этот интерфейс определяет общие черты сущностей, которые могут принимать участие в схватках в игре в NyetHack. Существа, способные сражаться, используют несколько игральных костей с несколькими гранями, чтобы определить величину ущерба - сумму очков, выпавших на всех игральных костях, - нанесенного противнику. Такие существа также должны иметь очки здоровья healthPoints и реализовать функцию attack().

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

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

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

    На следующем шаге мы рассмотрим реализацию интерфейса.




Предыдущий шаг Содержание Следующий шаг