Quantcast
Channel: CSDN博客移动开发推荐文章
Viewing all articles
Browse latest Browse all 5930

Kotlin学习之-5.4 可见性描述符

$
0
0

Kotlin学习之-5.4 可见性描述符

类,对象,接口,构造函数,函数,属性以及他们的setter可以用可见性描述符来修改其可见性。getter方法的可见性通常和属性的可见性一致。Kotlin中有4中可见性描述符:private, protected, internalpublic。如果没有显示写描述符,那么默认可见性是public 的。

下面是各种不同定义范围的解释。

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

//file name: example.kt
package foo
fun baz() {}
class Bar {}
  • 如果不指定任何可见性描述符的话,默认使用的是pubic, 意味着定义会在所有地方都可见
  • 如果指定是private的,它只会在定义域内可见。
  • 如果指定是internal的,它会在module中的所有地方可见。
  • protected 不能用在顶级的定义

例如:

//file name: example.kt
package foo

private fun foo() {} // example.kt 中可见

public var bar: Int = 5 // 全局可见
    private set         // setter 仅在example.kt 中可见

internal val baz = 6   // 在同module 中可见

类和接口

对于类中定义的成员:

  • private 意味着仅在这个类范围内可见(包括所有的成员)
  • protected 包括private的可见性,并且在子类中可见。
  • internalmodele中能够给看到类定义的部分,都可以看到internal的成员
  • public 任何可以看到类定义的部分,都可以看到public的成员

Java用户需要注意:在Kotlin中,外部类无法看到内部类的私有private成员

如果复写一个protected成员,并且不显式地指定可见性的话,复写的成员仍然是protected的可见性。

例如:

open class Outer {
    private val a = 1
    protected open val b = 2
    internal val c = 3
    val d = 4 // public by default

    protected class Nested {
        public val e: Int = 5
    }
}

class Subclass : Outer() {
    // a is not visible
    // b, c and d are visible
    // Nested and e are visible

    override val b = 5 // b is protected
}

class Unrelated(o: Outer) {
    // o.a, o.b are not visible
    // o.c and o.d are visible (same module)
    // Outer.Nested is not visible, and Nested::e is not visible either
}

构造器

为了指定类的主要构造器的可见性,可以使用如下语法(注意需要显式地使用constructor关键字)

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

这里的构造器是私有的。默认情况下,所有的构造器都是共有的public,这样当类可见时,它的构造器也是默认可见的。注意,一个internal的类的构造器仅在同module中可见。

局部声明

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

模块Modules

修饰符internal意味着它的成员在同模块中都是可见的。更确切的说,一个模块是一些Kotlin文件的集合被编译在一起。

  • 一个 IntellJ IDEA 模块
  • 一个Maven 或者Gradle 工程
  • 一些文件的集合,他们被一个Ant任务编译

PS,我会坚持把这个系列写完,有问题可以留言交流,也关注专栏Kotlin for Android Kotlin安卓开发

作者:farmer_cc 发表于2017/6/28 9:12:17 原文链接
阅读:0 评论:0 查看评论

Viewing all articles
Browse latest Browse all 5930

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>