京东云服务器推荐配置、多种配置选择,满足不同业务需求!

热门推荐

⭐ 稳定入门选择

配置:2核2G/5M

适用场景:个人站点 / 轻量应用

特点:性价比高,稳定可靠

¥19/月
立即购买
流量友好

☁️ 轻量云主机

配置:2核4G 5M

适用场景:小型业务 / 博客 / 测试环境

特点:流量友好,性能均衡

¥149/年
立即购买
高性能

💻 云服务主机

配置:4核16G 8M

适用场景:中小型服务 / 多并发场景

特点:充足内存与带宽,性能强劲

¥750/年
立即购买
新人专享

🎁 新人福利

新人访问 → 点击 → 最新活动

可获取 3000元 礼券

立即领取
移动端 / Kotlin 教程 / Kotlin 面向对象(OOP)
Kotlin 可见性修饰符
Kotlin 抽象类(Abstract)Kotlin 继承

Kotlin 可见性修饰符

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

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

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

包内的可见性修饰符

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

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

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

让我们举个实例:

//文件名: hello.kt
package test

fun 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中,局部函数,变量和类不能具有可见性修饰符。

Kotlin 抽象类(Abstract)Kotlin 继承
上一篇:Kotlin 继承