Модификатор private
Модификатор private используется для ограничения
видимости членов класса. Члены, объявленные с этим модификатором,
доступны только внутри класса, в котором они объявлены.
Это обеспечивает инкапсуляцию и защищает внутреннее
состояние объекта от внешнего вмешательства.
Синтаксис
private val propertyName: Type = value
private var propertyName: Type = value
private fun functionName() { }
private class ClassName { }
Пример
Создадим класс с приватным свойством и методом:
class 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}"
}
}
Пример
Попытка доступа к приватным членам извне класса вызовет ошибку компиляции:
val 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()
Результат выполнения кода:
ID: 12345, Name: John
Пример
Приватные члены доступны только внутри того же класса:
class 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())
Результат выполнения кода:
Double 700.0
Пример
Приватные члены не наследуются и не доступны в производных классах:
open 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)
}
}
Пример
Приватные конструкторы используются для создания классов, которые нельзя инстанциировать извне:
class 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()
Результат выполнения кода:
String "Working..."