クラス、オブジェクト、インタフェース、コンストラクタ、関数、プロパティとそのセッターは、可視性修飾子 (visibility modifiers) を持つことができます。(ゲッターは常にプロパティと同じ可視性を持ちます。)Kotlinには4つの可視性修飾子があります: private , protected , internal , public 。明示的な修飾子がない場合に使用されるデフォルトの可視性は、public です。
宣言スコープの違いは、後述の例をご覧ください。
パッケージ
関数、プロパティやクラス、オブジェクトやインターフェースは、「トップレベル」、つまり、パッケージ内部で直接宣言することができます。
fun baz() {}
class Bar {}
例:
private fun foo() {} // example.kt の中で見える
public var bar: Int = 5 // プロパティはどこでも見える
private set // セッターは example.kt の中でのみ見える
internal val baz = 6 // 同じモジュール内でのみ見える
クラスとインタフェース
クラス内で宣言した場合:
注意 Javaのユーザーへ:Kotlinでは、外部クラスはその内部クラスのprivate メンバが見えません。
protected のメンバをオーバーライドして、明示的に可視性を指定しない場合、オーバーライドするメンバも、protected の可視性になります。
例:
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 は見えない
}
コンストラクタ
クラスのプライマリコンストラクタの可視性を指定したい場合は、次の構文を使ってください(明示的に constructor* キーワードを付加しなければならないことに注意):
ローカル宣言
ローカル変数、関数やクラスは、可視性修飾子を持つことはできません。
モジュール
internal 可視性修飾子には、メンバが同じモジュールで見えることを意味します。具体的には、モジュールはKotlinのファイルセットであり、一緒にコンパイルされます。