На этом шаге мы рассмотрим обсудим эти понятия.
Добавление поведения в класс в виде функций класса (и данных в виде свойств класса, как мы увидим далее) создает описание, чем класс может быть и что может делать, и это описание доступно всем, у кого есть экземпляр класса.
По умолчанию любая функция или свойство без модификатора видимости будет доступна всем - то есть из любого файла или функции в программе. Так как вы не указали модификатор видимости для castFireball(), она может быть вызвана откуда угодно.
В некоторых случаях, как с castFireball(), вы захотите, чтобы другие части кода имели доступ к свойствам класса или вызывали функции класса. Но у вас также могут быть другие функции класса или свойства, которые не должны быть доступны повсюду.
С ростом количества классов в программе растет и сложность кода. Сокрытие деталей реализации, которые не должны быть доступны другим частям кода, помогает сохранить логику кода ясной и лаконичной. И в этом вам поможет ограничение области видимости.
В то время как функцию класса public можно вызвать из любого места программы, функция класса private доступна только в классе, в котором объявлена. Эта идея ограничения видимости некоторых свойств и/или функций класса в объектно-ориентированном программировании называется инкапсуляцией. Согласно этой идее класс должен выборочно предоставлять функции и свойства другим объектам для взаимодействия с ним. Все, что не задействуется, включая детали реализации функций и свойств, должно быть недоступно.
Например, код в Game.kt, вызывающий castFireball(), не интересует, как реализована эта функция. Для него важно только получить бокал напитка. Поэтому пока функция доступна, детали реализации не должны быть важны для вызывающего.
Более того, это даже может быть опасно, если код Game.kt сможет менять значения, на которые опирается castFireball(), то есть на количество создаваемых бокалов с напитком или на свойства напитка.
Проще говоря, создавая классы, оставляйте доступным только то, что вам надо. Таблица 1 содержит список модификаторов доступа.
Модификаторы | Описание |
---|---|
public (по умолчанию) | Функция или свойство будут доступны вне класса. По умолчанию функции и свойства без модификатора видимости получают модификатор public |
private | Функция или свойство будут доступны только внутри класса |
protected | Функция или свойство будут доступны только внутри класса или подкласса |
internal | Функция или свойство будут доступны внутри модуля |
Мы обсудим ключевое слово protected позднее.
Если вы знакомы с Java, обратите внимание, что в Kotlin отсутствует уровень видимости, ограниченный рамками пакета. Причину мы объясним в одном из следующих шагов.
На следующем шаге мы рассмотрим свойства класса.