This program shows how each visibility modifier controls access from inside the class, subclass, and outside.
open class Parent {
private val privateVal = "private"
internal val internalVal = "internal"
protected val protectedVal = "protected"
public val publicVal = "public"
fun showValues() {
println("Inside Parent:")
println(privateVal)
println(internalVal)
println(protectedVal)
println(publicVal)
}
}
class Child : Parent() {
fun showChildValues() {
println("Inside Child:")
// println(privateVal) // Error: privateVal not visible
println(internalVal) // visible
println(protectedVal) // visible
println(publicVal) // visible
}
}
fun main() {
val parent = Parent()
parent.showValues()
val child = Child()
child.showChildValues()
println("Outside classes:")
// println(parent.privateVal) // Error: private
println(parent.internalVal) // visible inside module
// println(parent.protectedVal) // Error: protected
println(parent.publicVal) // visible everywhere
}