亚洲区国产区激情区无码区,国产成人mv视频在线观看,国产A毛片AAAAAA,亚洲精品国产首次亮相在线

Kotlin 可見性修飾符

在本文中,您將了解Kotlin中的4種可見性修飾符,以及它們在不同情況下的工作方式。

可見性修飾符是用于設(shè)置類,對象,接口,構(gòu)造函數(shù),函數(shù),屬性及其設(shè)置器的可見性(可訪問性)的關(guān)鍵字。(不能設(shè)置 getters 的可見性修飾符,因為它們總是具有與屬性相同的可見性)

Kotlin類和對象文章中,您簡要了解了可見性修飾符 public 和 private。本文您將詳細了解另外兩個可見性修飾符 protected 和 internal(以及public 和 private)。

包內(nèi)的可見性修飾符

包組織一組相關(guān)的函數(shù)、屬性和類、對象和接口。

修飾符描述
public在任何地方都可見
private在包含聲明的文件內(nèi)可見
internal在同一模塊內(nèi)可見(一組一起編譯的Kotlin文件)
protected不可用于包(用于子類)

注意:如果未指定可見性修飾符,則默認情況下為默認值 public 。

讓我們舉個實例:

//文件名: hello.kt
package test

fun function1() {}   //默認情況下是公共的,并且在任何地方都可見

private fun function2() {}   //在hello.kt內(nèi)部可見

internal fun function3() {}   //在同一模塊內(nèi)可見

var name = "Foo"   //隨處可見
    get() = field   //在hello.kt內(nèi)可見(與其屬性相同)
    private set(value) {   //在hello.kt內(nèi)部可見
        field = value
    }

private class class1 {}   //在hello.kt內(nèi)部可見

類和接口內(nèi)的可見性修飾符

下面是可見性修飾符對類內(nèi)聲明的成員(函數(shù)、屬性)的工作方式:

修飾符描述
public對任何可以看到聲明類的客戶端可見
private僅在類內(nèi)部可見
protected在類及其子類內(nèi)可見
internal對模塊內(nèi)可以看到聲明類的任何客戶端可見

注意:如果您在派生類中重寫 protected 成員而不指定其可見性,則其可見性也將為 protected。

讓我們舉個實例:

open class Base() {
    var a = 1                 //默認情況下為公共
    private var b = 2         // Base 類私有
    protected open val c = 3  //對 Base 類和 Derived 類可見
    internal val d = 4        //在同一模塊內(nèi)可見

    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 不可見
}

更改構(gòu)造函數(shù)的可見性

默認情況下,構(gòu)造函數(shù)的可見性為 public。但是,你可以改變它。為此,您需要顯式地添加 constructor 關(guān)鍵字。

在下面的示例中,構(gòu)造函數(shù)默認為 public:

class Test(val a: Int) {
    // code
}

您可以通過以下方法更改其可見性。

class Test private constructor(val a: Int) {
    // code
}

這里的構(gòu)造函數(shù)是 private。

注意:  在Kotlin中,局部函數(shù),變量和類不能具有可見性修飾符。