Kotlin 官方学习教程之可见性修饰符

客官°小女子只卖身不卖艺 2022-06-13 23:39 420阅读 0赞

可见性修饰符

类,对象,接口,构造函数,属性以及它们的 setter 方法都可以有可见性修饰词。( getter 总是具有与该属性相同的可见性。)。在 Kotlin 中有四种修饰词:private,protected,internal,以及 public 。默认的修饰符是 public。

下面请查看不同类型声明范围的说明。

函数,属性和类,对象和接口可以在 “top-level” 声明,例如直接定义在一个包内:

  1. // file name: example.kt
  2. package foo fun baz() { }
  3. class Bar { }
  • 如果您没有指定任何可见性修饰符,则默认使用 public,这意味着您的声明将在任何位置都可见;
  • 如果你声明为 private ,则只在包含声明的文件中可见;
  • 如果用 internal 声明,则在同一模块中的任何地方可见;
  • protected 在 “top-level” 中不可以使用

例子:

  1. // file name: example.kt
  2. package foo
  3. private fun foo() {} // visible inside example.kt
  4. public var bar: Int = 5 // 属性在任何地方可见
  5. private set // setter 方法只在 example.kt 文件内可见
  6. internal val baz = 6 // 在同一个 module 内可见

类和接口

对于在类中声明的成员:

  • private 只在该类(以及它所有的成员)中可见
  • protected 和 private 一样,但在子类中也可见
  • internal 在本模块的所有可以访问到声明区域的均可以访问该类的所有 internal 成员
  • public 任何地方可见

java 使用者注意:外部类不可以访问内部类的 private 成员。

如果重写 protected 成员但不指定可见性,重写成员的可见性也为 protected。

例子:

  1. open class Outer {
  2. private val a = 1
  3. protected open val b = 2
  4. internal val c = 3
  5. val d = 4 // 默认为 public 型
  6. protected class Nested {
  7. public val e: Int = 5
  8. }
  9. }
  10. class Subclass : Outer() {
  11. // a 是不可见的
  12. // b, c 和d 是可见的
  13. // Nested 和 e 是可见的
  14. override val b = 5 // 'b' 是 protected 型
  15. }
  16. class Unrelated(o: Outer) {
  17. // o.a, o.b 是不可见的
  18. // o.c and o.d 是可见的 (在同一个 module 内)
  19. // Outer.Nested 是不可见的, and Nested::e 也是不可见的
  20. }

构造函数

要指定类的主构造函数的可见性,请使用以下语法(请注意,您需要添加一个显式 constructor 关键字):

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

这里构造函数是 private 。所有的构造函数默认是 public ,实际上只要类是可见的它们就是可见的 (注意 internal 类型的类中的 public 属性只能在同一个模块内才可以访问).

局部变量

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

模块

internal 修饰符是指成员的可见性是只在同一个模块中才可见的。模块在 Kotlin 中就是一系列的 Kotlin 文件编译在一起:

  • an IntelliJ IDEA module;
  • a Maven or Gradle project;
  • a set of files compiled with one invocation of the Ant task.

发表评论

表情:
评论列表 (有 0 条评论,420人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Kotlin 官方学习教程接口

    接口 Kotlin 中的接口和 Java 8 中的接口很像。他们可以包含抽象方法的说明和方法的实现。使接口和抽象类不同的是接口不能储存状态。接口可以含有参数,但必须是抽象

    相关 Kotlin-2.4-可见修饰符

    1、可见性修饰符是什么? > 类,对象,接口,构造器,函数,属性和他们的setter都可以有`可见性修饰符`(getter具有和属性同样的可见性)。一共四种:private、