类,对象,接口,构造函数,属性以及它们的 setter 方法都可以有可见性修饰词。( getter 总是具有与该属性相同的可见性。)。在 Kotlin 中有四种修饰词:private,protected,internal,以及 public 。默认的修饰符是 public。
下面请查看不同类型声明范围的说明。
函数,属性和类,对象和接口可以在 “top-level” 声明,例如直接定义在一个包内:
// file name: example.kt
package foo
fun baz() {}
class Bar {}
例子:
// file name: example.kt
package foo
private fun foo() {} // visible inside example.kt
public var bar: Int = 5 // 属性在任何地方可见
private set // setter 方法只在 example.kt 文件内可见
internal val baz = 6 // 在同一个 module 内可见
对于在类中声明的成员:
java 使用者注意:外部类不可以访问内部类的 private 成员。
如果重写 protected 成员但不指定可见性,重写成员的可见性也为 protected。
例子:
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 // 'b' 是 protected 型
}
class Unrelated(o: Outer) {
// o.a, o.b 是不可见的
// o.c and o.d 是可见的 (在同一个 module 内)
// Outer.Nested 是不可见的, and Nested::e 也是不可见的
}
要指定类的主构造函数的可见性,请使用以下语法(请注意,您需要添加一个显式 constructor 关键字):
class C private constructor(a: Int) { ... }
这里构造函数是 private 。所有的构造函数默认是 public ,实际上只要类是可见的它们就是可见的 (注意 internal 类型的类中的 public 属性只能在同一个模块内才可以访问).
局部变量,函数和类不能有可见性修饰符。
internal 修饰符是指成员的可见性是只在同一个模块中才可见的。模块在 Kotlin 中就是一系列的 Kotlin 文件编译在一起:
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/jim__charles/article/details/72860816
内容来源于网络,如有侵权,请联系作者删除!