open class Outer { private val a = 1 protected open val b = 2 internal val c = 3 val d = 4 // デフォルトで public protected class Nested { public val e: Int = 5 } } class Subclass : Outer() { // a は見えない // b, c, d は見える // Nested と e は見える override val b = 5 // 'b' は protected } class Unrelated(o: Outer) { // o.a, o.b は見えない // o.c and o.d は見える(同じモジュール) // Outer.Nested, Nested::e は見えない }