美文网首页
kotlin 中的可见性修饰符

kotlin 中的可见性修饰符

作者: Lost_Robot | 来源:发表于2017-07-20 14:05 被阅读79次

在 Kotlin 中有这四个可见性修饰符:

  • private
  • protected
  • internal
  • public

如果没有显式指定修饰符的话,默认可见性是public

1.顶层声明 之 可见性

函数、属性和类、对象和接口可以在顶层声明,即直接在包内:

  • 如果你不指定任何可见性修饰符,默认为 public ,这意味着你的声明将随处可见;
  • 如果你声明为 private ,它只会在声明它的文件内可见;
  • 如果你声明为 internal ,它会在相同模块内随处可见;(一个模块是编译
    在一起的一套 Kotlin 文件)
  • protected 不适用于顶层声明。
// 文件名:example.kt
package foo
private fun foo() {} // 在 example.kt 内可见
public var bar: Int = 5 // 该属性随处可见
private set // setter 只在 example.kt 内可见
internal val baz = 6 // 相同模块内可见

2.类内部声明 之 可见性

对于类内部声明的成员:可见性修饰符

  • private 意味着只在这个类内部(包含其所有成员)可见;
  • protected —— 和 private 一样 + 在子类中可见。
  • internal —— 能见到类声明的 本模块内 的任何客户端都可见其 internal 成员;
  • public —— 能见到类声明的任何客户端都可见其 public 成员。
  • Kotlin 中外部类不能访问内部类的 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 // “b”为 protected
}

class Unrelated(o: Outer) {
        // o.a、o.b 不可见
        // o.c 和 o.d 可见(相同模块)
        // Outer.Nested 不可见,Nested::e 也不可见
}

模块

可见性修饰符 internal 意味着该成员只在相同模块内可见。更具体地说, 一个模块是编译在一起的一套 Kotlin 文件:

  • 一个 IntelliJ IDEA 模块;
  • 一个 Maven 或者 Gradle 项目;
  • 一次 <kotlinc> Ant 任务执行所编译的一套文件。

相关文章

网友评论

      本文标题:kotlin 中的可见性修饰符

      本文链接:https://www.haomeiwen.com/subject/muwdkxtx.html