鍍金池/ 教程/ Android/ Kotlin可見(jiàn)性修飾符
Kotlin內(nèi)聯(lián)函數(shù)
Kotlin開(kāi)發(fā)環(huán)境設(shè)置(Eclipse)
Kotlin調(diào)用Java代碼
Kotlin使用Ant
Kotlin編譯器插件
Kotlin相等性
Kotlin JavaScript模塊
編寫(xiě)Kotlin代碼文檔
Kotlin返回和跳轉(zhuǎn)
Kotlin異常處理
Kotlin可見(jiàn)性修飾符
Kotlin委托
Kotlin委托屬性
Kotlin編碼約定/編碼風(fēng)格
Kotlin基礎(chǔ)語(yǔ)法
使用Kotlin進(jìn)行服務(wù)器端開(kāi)發(fā)
Kotlin接口
Kotlin反射
Kotlin類型別名
Kotlin枚舉類
Kotlin當(dāng)前版本是多少?
Kotlin注解處理工具
Kotlin類型的檢查與轉(zhuǎn)換
Kotlin屬性和字段
Kotlin類型安全的構(gòu)建器
Kotlin相比Java語(yǔ)言有哪些優(yōu)點(diǎn)?
Kotlin JavaScript反射
Kotlin 是什么?
Kotlin泛型
Kotlin慣用語(yǔ)法
Kotlin與OSGi
Kotlin數(shù)據(jù)類型
Kotlin是面向?qū)ο筮€是函數(shù)式語(yǔ)言?
Kotlin動(dòng)態(tài)類型
Kotlin協(xié)程
Kotlin操作符符重載
Kotlin使用Gradle
Kotlin密封類
Kotlin兼容性
Kotlin集合
Kotlin調(diào)用JavaScript
Kotlin null值安全
Kotlin函數(shù)
Kotlin開(kāi)發(fā)環(huán)境設(shè)置(IntelliJ IDEA)
Kotlin嵌套類
Kotlin控制流程
Kotlin和Java語(yǔ)言比較
Kotlin 與 Java 語(yǔ)言兼容嗎?
Kotlin教程
Kotlin類和繼承
Kotlin對(duì)象表達(dá)式和對(duì)象聲明
JavaScript中調(diào)用Kotlin
Kotlin區(qū)間/范圍
Kotlin數(shù)據(jù)類
Kotlin lambda表達(dá)式
Kotlin是免費(fèi)的嗎?
Kotlin包
使用Kotlin進(jìn)行Android開(kāi)發(fā)
在Java中調(diào)用Kotlin代碼
Kotlin this表達(dá)式
使用Kotlin進(jìn)行JavaScript開(kāi)發(fā)
Kotlin擴(kuò)展
Kotlin解構(gòu)聲明
Kotlin注解
Kotlin使用Maven

Kotlin可見(jiàn)性修飾符

類,對(duì)象,接口,構(gòu)造函數(shù),函數(shù),屬性及其設(shè)置器可以具有可見(jiàn)性修飾符。 (Getter總是具有與屬性相同的可見(jiàn)性。)Kotlin中有四個(gè)可見(jiàn)性修飾符:

private, protected, internalpublic。如果沒(méi)有顯式修飾符,則使用的默認(rèn)可見(jiàn)性是public。

下面請(qǐng)查看不同類型聲明范圍的說(shuō)明。

函數(shù),屬性和類,對(duì)象和接口可以在“頂層”上聲明,即直接在包中:

// file name: example.kt
package foo

fun baz() {}
class Bar {}
  • 如果沒(méi)有指定任何可見(jiàn)性修飾符,則默認(rèn)使用public,這意味著聲明將在任何位置都可見(jiàn);
  • 如果將一個(gè)聲明標(biāo)記為private,那么它只會(huì)在包含聲明的文件中可見(jiàn);
  • 如果將其標(biāo)記為internal,則在同一模塊中的任何地方可見(jiàn);
  • 如果將其標(biāo)記為protected,則不可用于頂層聲明。

示例

// file name: example.kt
package foo

private fun foo() {} // visible inside example.kt

public var bar: Int = 5 // property is visible everywhere
    private set         // setter is visible only in example.kt

internal val baz = 6    // visible inside the same module

類和接口

對(duì)于在類中聲明的成員:

  • private只有在這個(gè)類才能看到(包括其所有成員);
  • protected - 相同于private + 在子類中可見(jiàn);
  • internal - 模塊中的任何看到聲明類的客戶端都看到其內(nèi)部成員;
  • public - 聲明類的任何客戶看到它的公共成員。

注意Java用戶:外部類不會(huì)在Kotlin中看到其內(nèi)部類的私有成員。

如果覆蓋protected的成員,并且不明確指定可見(jiàn)性,則覆蓋成員也將具有protected的可見(jiàn)性。

例子

open class Outer {
    private val a = 1
    protected open val b = 2
    internal val c = 3
    val d = 4  // public by default

    protected class Nested {
        public val e: Int = 5
    }
}

class Subclass : Outer() {
    // a is not visible
    // b, c and d are visible
    // Nested and e are visible

    override val b = 5   // 'b' is protected
}

class Unrelated(o: Outer) {
    // o.a, o.b are not visible
    // o.c and o.d are visible (same module)
    // Outer.Nested is not visible, and Nested::e is not visible either 
}

構(gòu)造函數(shù)

要指定類的主構(gòu)造函數(shù)的可見(jiàn)性,請(qǐng)使用以下語(yǔ)法(請(qǐng)注意,需要添加一個(gè)顯式constructor關(guān)鍵字):

class C private constructor(a: Int) { ... }

這里的構(gòu)造函數(shù)是:private。 默認(rèn)情況下,所有構(gòu)造函數(shù)都是public,它們有效地相當(dāng)于在類可見(jiàn)的地方可見(jiàn)(即internal類的構(gòu)造函數(shù)只能在同一模塊中可見(jiàn))。

局部聲明

局部的變量,函數(shù)和類不能有可見(jiàn)性修飾符。

模塊

內(nèi)部可見(jiàn)性修飾符意味著該成員可以使用相同的模塊。 更具體地說(shuō),一個(gè)模塊是一組編譯的Kotlin文件:

  • IntelliJ IDEA模塊;
  • Maven或Gradle項(xiàng)目;
  • 通過(guò)一次調(diào)用Ant任務(wù)編譯的一組文件。

上一篇:Kotlin兼容性下一篇:Kotlin集合