类和接口中的可见性
在类中定义成员变量:
- private意味着仅仅是在类中可见
- protected意味着在类及其子类中可见
- internal意味着在同一个module下的任何可见的类都可以使用这个internal成员
- public意味着任何类只要是能访问其对应的类就可以访问这个public成员
对Java用户需要注意的是:在Kotlin中外部类不能访问内部类中的private成员,在Java中则可以,请查看对应内容。
如果你覆写了一个protected的成员并且没有显示的指定任何的可见性修饰符,那么覆写的成员的可见性依然是protected。
open class Outer {
private val a = 1
protected open val b = 2
internal val c = 3
val d = 4 // public by default
protected class Nested {
public val e: Int = 5
}
}
class Subclass : Outer() {
// a is not visible
// b, c and d are visible
// Nested and e are visible
override val b = 5 // 'b' is protected
}
class Unrelated(o: Outer) {
// o.a, o.b are not visible
// o.c and o.d are visible (same module)
// Outer.Nested is not visible, and Nested::e is not visible either
}