官方文檔: http://kotlinlang.org/docs/reference/visibility-modifiers.html
1.可見性修飾符
在Kotlin中有四種可見性修飾符: private, protected, internal, public
如果沒有指定,則默認是public
類/對象/接口/構(gòu)造函數(shù)/方法/屬性和setter都有可見性修飾符(getter與屬性可見性相同)
2.在包中
函數(shù)/屬性/類/對象/接口都可在頂層聲明(即直接在包內(nèi)):
默認public: 隨處可見
private: 只在聲明的文件內(nèi)可見
internal: 在相同模塊內(nèi)隨處可見
protected: 不適用于頂層聲明
// 文件名:example.kt
package foo
private fun foo() {} // 只在example.kt內(nèi)可見
public var bar: Int = 5 // 隨處可見
private set // set只在example.kt內(nèi)可見
internal val baz = 6 // 在相同模塊內(nèi)可見
3.在類/接口中
類/接口的成員:
private: 只在本類中可見
protected: 在本類中和其子類中可見
internal: 本模塊內(nèi)都可見
public: 隨處可見
注意: Kotlin外部類不能訪問內(nèi)部類的private成員
open class Outer {
private val a = 1
protected open val b = 2
internal val c = 3
val d = 4 // 默認 public
protected class Nested {
public val e: Int = 5
}
}
class Subclass : Outer() {
// a 不可見
// b寸认、c仙粱、d 可見
// Nested 和 e 可見
override val b = 5 // 繼承為protected
}
class Unrelated(o: Outer) {
// o.a o.b 不可見
// o.c o.d 可見
// Outer.Nested Nested::e 不可見
}
4.構(gòu)造函數(shù)
默認情況下,所有構(gòu)造函數(shù)都是public,就等于類可見,它就可見!
指定類主構(gòu)造函數(shù)的可見性(需要添加constructor):
class C private constructor(a: Int) {
}
5.模塊
可見性修飾符internal: 只在相同模塊內(nèi)可見
一個模塊是一起編譯的一套Kotlin文件:
一個IntelliJ IDEA模塊
一個Maven或者Gradle項目
通過一次調(diào)用Ant任務編譯的一套Kotlin文件
簡書: http://www.reibang.com/p/0f285925e32c
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/73522463
GitHub博客:http://lioil.win/2017/06/20/Kotlin-visibility.html
Coding博客:http://c.lioil.win/2017/06/20/Kotlin-visibility.html