English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
この記事では、Kotlinでの4種類のアクセス修飾子があり、それらは異なる状況での動作方法について説明します。
アクセス修飾子は、クラス、オブジェクト、インターフェース、コンストラクタ、関数、プロパティおよびそのセッターのアクセス(可視性)を設定するために使用されるキーワードです。(ゲッターのアクセス修飾子は設定できません。なぜなら、それらは常にプロパティと同じアクセスを持っているからです。)
在Kotlin クラスとオブジェクト文章では、あなたはpublicおよびprivateというアクセス修飾子について簡単に学びました。この記事では、さらにprotectedおよびinternal(そしてpublicおよびprivate)について詳しく説明します。
パッケージは、関連する関数、属性、クラス、オブジェクト、インターフェースを組織します。
修飾子 | 説明 |
---|---|
public | どこでも可见 |
private | 宣言が含まれるファイル内で可见 |
internal | 同一モジュール内で可见(一緒にコンパイルされる Kotlin ファイルのセット) |
protected | パッケージには使用できません(サブクラス用) |
注意:可见性修飾子が指定されていない場合、デフォルトでは public になります。
例を示しましょう:
//ファイル名: hello.kt package test fun function1() {} //デフォルトではパブリックで、どこでも見えます private fun function2() {} //hello.kt 内で可见 internal fun function3() {} //同一モジュール内で見えます var name = "Foo" //どこでも見えます get() = field //hello.kt 内で可见(属性と同じ) private set(value) { //hello.kt 内で可见 field = value } private class class1 {} //hello.kt 内で可见
以下は、可见性修飾子がクラス内のメンバー(関数、属性)に対してどのように働くかの説明です:
修飾子 | 説明 |
---|---|
public | 宣言されたクラスを見ることができるすべてのクライアントに見えます |
private | クラス内のみで見えます |
protected | クラスおよびその子クラス内で見えます |
internal | モジュール内のすべてのクライアントに宣言されたクラスが見えます |
注意:派生クラスで protected メンバーをオーバーライドし、その可见性を指定しない場合、その可见性も protected になります。
例を示しましょう:
open class Base() { var a = 1 //デフォルトではパブリック private var b = 2 // Base クラスはプライベート protected open val c = 3 //Base クラスと Derived クラスに見えます internal val d = 4 //同一モジュール内で見えます protected fun e() { } //Base クラスと Derived クラスに見えます } class Derived: Base() { // a、c、d、および e() Base クラスのすべての属性は見えます // b は見えません override val c = 9 // c は protected } fun main(args: Array<String>) { val base = Base() //base.aとbase.dは見えます // base.b、base.c と base.e() は見えません val derived = Derived() // derived.c は不可視 }
デフォルトでは、コンストラクタの可視性はpublicですが、変更できます。これには、明示的にconstructorキーワードを追加する必要があります。
以下の例では、コンストラクタはデフォルトでpublicです:
class Test(val a: Int) { // code }
その可視性を変更するには以下の方法を使用できます。
class Test private constructor(val a: Int) { // code }
ここでのコンストラクタはprivateです。
注意: Kotlinでは、ローカル関数、変数、クラスには可視性修飾子を持つことができません。