阅读 132

Kotlin 可见性修饰符

在本文中,您将了解Kotlin中的4种可见性修饰符,以及它们在不同情况下的工作方式。

可见性修饰符是用于设置类,对象,接口,构造函数,函数,属性及其设置器的可见性(可访问性)的关键字。(不能设置 getters 的可见性修饰符,因为它们总是具有与属性相同的可见性)

在Kotlin类和对象文章中,您简要了解了可见性修饰符 public 和 private。本文您将详细了解另外两个可见性修饰符 protected 和 internal(以及public 和 private)。

包内的可见性修饰符

包组织一组相关的函数、属性和类、对象和接口。

修饰符描述
public在任何地方都可见
private在包含声明的文件内可见
internal在同一模块内可见(一组一起编译的Kotlin文件)
protected不可用于包(用于子类)

注意:如果未指定可见性修饰符,则默认情况下为默认值 public 。

让我们举个实例:

//文件名: hello.ktpackage testfun function1() {}   //默认情况下是公共的,并且在任何地方都可见private fun function2() {}   //在hello.kt内部可见internal fun function3() {}   //在同一模块内可见var name = "Foo"   //随处可见    get() = field   //在hello.kt内可见(与其属性相同)    private set(value) {   //在hello.kt内部可见        field = value
    }private class class1 {}   //在hello.kt内部可见

类和接口内的可见性修饰符

下面是可见性修饰符对类内声明的成员(函数、属性)的工作方式:

修饰符描述
public对任何可以看到声明类的客户端可见
private仅在类内部可见
protected在类及其子类内可见
internal对模块内可以看到声明类的任何客户端可见

注意:如果您在派生类中重写 protected 成员而不指定其可见性,则其可见性也将为 protected。

让我们举个实例:

open class Base() {
    var a = 1                 //默认情况下为公共    private var b = 2         // Base 类私有    protected open val c = 3  //对 Base 类和 Derived 类可见    internal val d = 4        //在同一模块内可见    protected fun e() { }     //对 Base 类和 Derived 类可见}class Derived: Base() {

    // a, c, d, 和 e()Base 类的所有属性都是可见的    // b 不可见    override val c = 9        // c 是 protected}fun main(args: Array<String>) {
    val base = Base()

    //base.a和base.d可见    // base.b, base.c 和 base.e() 不可见    val derived = Derived()
    // derived.c 不可见}

更改构造函数的可见性

默认情况下,构造函数的可见性为 public。但是,你可以改变它。为此,您需要显式地添加 constructor 关键字。

在下面的示例中,构造函数默认为 public:

class Test(val a: Int) {
    // code}

您可以通过以下方法更改其可见性。

class Test private constructor(val a: Int) {
    // code}

这里的构造函数是 private。

注意:  在Kotlin中,局部函数,变量和类不能具有可见性修饰符。


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐