美文网首页
Kotlin 可见性修饰符

Kotlin 可见性修饰符

作者: wind_sky | 来源:发表于2019-07-26 11:29 被阅读0次

    可见性修饰符是非常基本的知识,为什么还要单拿出来说呢?因为我们在使用Kotlin 时都会和Java 进行比较记忆或者互操作,但是在可见性修饰符这里就和Java 有一些不同,记录一下,避免出坑。

    Kotlin 中 类、对象、接口、构造函数、方法、属性和它们的 setter 都可以有 可见性修饰符。 (getter 总是与属性有着相同的可见性。)

    在 Kotlin 中有这四个可见性修饰符:private、 protected、 internal 和 public。 如果没有显式指定修饰符的话,默认可见性是 public,而Java 中默认可见性是包级。

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

    // 文件名:example.kt
    package foo
    
    fun baz() {}
    class Bar {}
    
    • 如果你不指定任何可见性修饰符,默认为 public,这意味着你的声明将随处可见;

    • 如果你声明为 private,它只会在声明它的文件内可见;

    • 如果你声明为 internal,它会在相同 模块 随处可见;

    • protected 不适用于顶层声明。

    注意:要使用另一包中可见的顶层声明,仍需将其导入来。

    类和接口

    对于类内部声明的成员:

    • private 意味着只在这个类内部(包含其所有成员)可见;

    • protected—— 和 private一样 + 在子类中可见,这一点和Java 不同,Java 中protected 成员在同一包内是可见的,而Kotlin 不可以;

    • internal —— 能见到类声明的 本模块内 的任何客户端都可见其 internal 成员,这种模块级可见和Java 中的包级可见不同,可见性范围要大于包级;

    • public —— 能见到类声明的任何客户端都可见其 public 成员。

    注意 与Java 中的不同:Kotlin 中外部类不能访问内部类的 private 成员。

    如果你覆盖一个 protected 成员并且没有显式指定其可见性,该成员还会是 protected 可见性。

    上面提到了\color{#0099ff}{模块},一个模块是编译在一起的一套 Kotlin 文件,它可以是:

    • 一个 IntelliJ IDEA 模块;

    • 一个 Maven 项目;

    • 一个 Gradle 源集(例外是 test 源集可以访问 main 的 internal 声明);

    • 一次 <kotlinc> Ant 任务执行所编译的一套文件。

    相关文章

      网友评论

          本文标题:Kotlin 可见性修饰符

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