Модификатор private

Модификатор private используется для ограничения видимости членов класса. Члены, объявленные с этим модификатором, доступны только внутри класса, в котором они объявлены. Это обеспечивает инкапсуляцию и защищает внутреннее состояние объекта от внешнего вмешательства.

Синтаксис

kotlinprivate val propertyName: Type = value
private var propertyName: Type = value
private fun functionName() { }
private class ClassName { }

Пример

Создадим класс с приватным свойством и методом:

kotlinclass Person {
  private val id: Int = 12345
  private var name: String = "John"
  
  fun printInfo() {
    println("ID: $id, Name: $name")
  }
  
  private fun generateSecretCode(): String {
    return "CODE${id}${name.length}"
  }
}

Пример

Попытка доступа к приватным членам извне класса вызовет ошибку компиляции:

kotlinval person = Person()
person.printInfo()

// Ошибка компиляции: Cannot access 'id': it is private in 'Person'
// println(person.id)

// Ошибка компиляции: Cannot access 'generateSecretCode': it is private in 'Person'
// person.generateSecretCode()

Результат выполнения кода:

kotlinID: 12345, Name: John

Пример

Приватные члены доступны только внутри того же класса:

kotlinclass BankAccount {
  private var balance: Double = 0.0
  
  fun deposit(amount: Double) {
    if (amount > 0) {
      balance += amount
    }
  }
  
  fun withdraw(amount: Double): Boolean {
    if (amount > 0 && balance >= amount) {
      balance -= amount
      return true
    }
    return false
  }
  
  fun getBalance(): Double {
    return balance
  }
}

val account = BankAccount()
account.deposit(1000.0)
account.withdraw(300.0)
println(account.getBalance())

Результат выполнения кода:

kotlinDouble 700.0

Пример

Приватные члены не наследуются и не доступны в производных классах:

kotlinopen class BaseClass {
  private val secret: String = "base secret"
  protected val protectedSecret: String = "protected secret"
}

class DerivedClass : BaseClass() {
  fun showSecrets() {
    // Ошибка: Cannot access 'secret': it is private in 'BaseClass'
    // println(secret)
    
    println(protectedSecret)
  }
}

Пример

Приватные конструкторы используются для создания классов, которые нельзя инстанциировать извне:

kotlinclass Singleton private constructor() {
  companion object {
    val instance: Singleton by lazy { Singleton() }
  }
  
  fun doWork() {
    println("Working...")
  }
}

// val singleton = Singleton() // Ошибка: private constructor
val singleton = Singleton.instance
singleton.doWork()

Результат выполнения кода:

kotlinString "Working..."

Смотрите также

  • модификатор public,
    который обеспечивает максимальную видимость членов класса
  • модификатор protected,
    который ограничивает видимость членами класса и наследниками
  • модификатор internal,
    который ограничивает видимость в пределах модуля
  • ключевое слово class,
    которое используется для объявления классов