Kotlin 可见性修饰符

xiaoxiao2021-02-28  95

地址:http://kotlinlang.org/docs/reference/visibility-modifiers.html 日期:2017-07-11 译者:Linky

可见性修饰符

类、对象、接口、构造器、函数、属性和他们的 setters 方法都可以用 可见性修饰符 修饰(Getters 通常 都和属性的可见性相同)。Kotlin 中有四个可见性修饰符:private、protected、internal 和 public。 如果没有显式添加,则默认为 public。

函数、属性 和 类、对象以及接口都可以在 顶层 声明,例如,直接在包中声明

package foo fun baz() {} class Bar {}

—— 如果不指定可见性,默认是 public,也就是说你的声明可以在任何地方可见; —— 如果用 private 修饰一个属性,那么该属性只能在包含该声明的文件内部可见; —— 如果用 internal 修饰一个属性,那么该属性在相同的 module 中可见; —— 在 顶层声明中,不能用 protected 修饰;

例如:

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

类 和 接口

对于声明在 类 中的成员

—— private 意味着 只在类内可见 —— protected 意味着 类内 + 子类中可见 —— internal 在 module 内部的任意 client,如果可访问声明的 类,那么也可以访问该类的 internal 成员 —— public 任意 client,如果可访问声明的类,那么也可见它的 public 成员

注意:对于 Java 用户来说,外部类不能访问 Kotlin 内部类的私有成员。

如果你继承了一个 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' is protected } class Unrelated(o: Outer) { // o.a, o.b 是不可见的 // o.c 和 o.d 是可见的(相同的 module) // Outer.Nested 不可见,Nested::e 也不可见 }

构造器

为了声明一个类的基本构造器的可见性,使用下面的语法:(需要显式地使用 constructor 关键字)

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

在这里,构造器是 private 的。默认情况下,所有的构造器都是 public 的, internal 声明的 class 只在相同的 module 中可见。

局部声明

局部变量,函数和类不能有 可见性修饰符

模块

internal 可见性修饰符意味着相同 module 中的成员可见。具体来说, 一个 module 就是一组 Kotlin 文件编译在了一起。

—— 一个 Intellij IDEA 模块; —— 一个 Maven 项目; —— 一个 Gradle 文件集合; —— 一组被 Ant 任务编译的文件;

转载请注明原文地址: https://www.6miu.com/read-60316.html

最新回复(0)