クラス、オブジェクト、インターフェイス、コンストラクター、関数、プロパティ、およびそれらのセッターはすべて、可視性修飾子を持つことができます。(ゲッターは常にプロパティと同じ可視性を持ちます。) Kotlin には、 private 、 protected 、 external 、 public の 4 つの可視性修飾子があります。修飾子が使用されない場合、デフォルトは public です。
以下では、さまざまなタイプを変更するときの可視性修飾子の役割について説明します。
バッグ
関数、プロパティとクラス、オブジェクトとインターフェイスは、「トップレベル」、つまりパッケージ内で直接宣言できます。
// file name: example.kt
package foo
fun baz() {}
class Bar {}
- 可視性修飾子を宣言しない場合、デフォルトは public となり、宣言したものは任意に参照できます。
- プライベートとして宣言された場合、このファイル内でのみ参照できます。
- 内部として宣言すると、同じモジュール内で表示されます。
- protected はトップレベルの宣言では使用できません。
クラスとインターフェース
クラスのメンバーの場合:
- private : このクラスでのみ表示されます。
- protected : このクラスとそのサブクラスでのみ表示されます。
- Internal : 同じモジュール内で表示されます。
- public : どこでも表示されます。
Java ユーザー向けの注意: Kotlin では、外部クラスは内部クラスのプライベート メンバーを使用できません。
保護されたメンバーをオーバーライドしても、可視性修飾子で修飾しない場合、オーバーライドされたメンバーも保護されます。
コンストラクタ
クラスのプライマリ コンストラクターの可視性を指定するには、次の構文を使用します (constructor キーワードを追加する必要があることに注意してください)。
class C private constructor(a: Int) { ... }
ここではコンストラクターはプライベートです。デフォルトでは、すべてのコンストラクターはパブリックです。つまり、クラスが表示されるすべての場所でコンストラクターが表示されます (たとえば、内部クラスのコンストラクターは同じモジュール内でのみ表示できます)。
部分的なステートメント
ローカル変数、関数、クラスには可視性修飾子を含めることはできません。
モジュール
「内部」は、メンバーが同じモジュール内で表示されることを意味します。より具体的には、モジュールは、以下のようにまとめられた一連の Kotlin ファイルです。
- IntelliJ IDEA モジュール。
- Maven または Gradle プロジェクト。
- Ant タスク呼び出しでコンパイルされた一連のファイル。