Careeroza
Private and Protected
private Members
Example
class PasswordManager {
private val passwords = mutableMapOf<String, String>()
private fun hash(pw: String) = pw.reversed() + pw.length // toy hash, hidden
fun save(site: String, pw: String) { passwords[site] = hash(pw) }
fun check(site: String, pw: String) = passwords[site] == hash(pw)
}
fun main() {
val pm = PasswordManager()
pm.save("gmail", "secret123")
println(pm.check("gmail", "secret123"))
println(pm.check("gmail", "guess"))
// pm.passwords -> error: Cannot access 'passwords': it is private
}Output
true false
protected Members
Example
protected members are visible to subclasses, but not to outside code.
open class Screen {
protected var title = "Untitled"
protected fun log(msg: String) = println("[${title}] $msg")
}
class HomeScreen : Screen() {
fun open() {
title = "Home" // OK: subclass can use protected members
log("opened")
}
}
fun main() {
HomeScreen().open()
// HomeScreen().title -> error: it is protected
}Output
[Home] opened
Private Constructor
class DatabaseClient private constructor(val url: String) {
companion object {
fun create(env: String) = DatabaseClient(if (env == "prod") "db.prod" else "db.local")
}
}
// DatabaseClient("x") // error: constructor is private
// DatabaseClient.create("prod") // OK