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 は見えない
}