当前位置:数据分析 > Kotlin 嵌套类和内部类

Kotlin 嵌套类和内部类

  • 发布:2023-09-30 05:40

在本文中,您将在示例的帮助下学习如何使用嵌套类和内部类。

Kotlin 嵌套类

与 Java 类似,Kotlin 允许您在另一个类中定义一个类,称为嵌套类。

类外层{
    …………
    类嵌套{
        …………
    }
}

由于类 Nested 是其封闭类 Outer 的成员,. 可用于访问 嵌套类和符号他们的成员。


示例:Kotlin 嵌套类

类外层{

    val a =“嵌套类之外。”

    类嵌套{
        val b =“嵌套类内部。”
        fun callMe() = "从嵌套类内部调用函数。"
    }
}

有趣的主要(参数:数组){
    // 访问嵌套类的成员
    println(Outer.Nested().b)

    // 创建嵌套类的对象
    val 嵌套 = Outer.Nested()
    println(嵌套的.callMe())
}

运行此程序时,输出为:

在嵌套类中。
从嵌套类内部调用函数。

对于 Java 用户

Kotlin 中的嵌套类与 Java 中的静态嵌套类类似。

在Java中,当你在另一个类中声明一个类时,它默认成为内部类。但在 Kotlin 中,您需要使用 inner 修饰符创建一个内部类,我们将在下面讨论。


Kotlin 内部类

Kotlin 中的嵌套类无法访问外部类实例。例如,

类外层{
    val foo =“嵌套类之外。”

    类嵌套{
        // 错误!无法访问外部类的成员。
        有趣的 callMe() = foo
    }
}

有趣的主要(参数:数组){

    val 外部 = 外部()
    println(outer.Nested().callMe())
}

上面的代码无法编译,因为我们试图从 Nested 类内部访问 Outer 类的 foo 属性。

要解决这个问题,需要创建一个内部类,将嵌套类标记为inner。内部类拥有对外部类的引用,并且可以访问外部类的成员。


示例:Kotlin 内部类

类外层{

    val a =“嵌套类之外。”

    内部类内部{
        有趣的 callMe() = a
    }
}

有趣的主要(参数:数组){

    val 外部 = 外部()
    println("使用外部对象:${outer.Inner().callMe()}")

    val 内部 = Outer().Inner()
    println("使用内部对象:${inner.callMe()}")
}

运行此程序时,输出为:

使用外部对象:外部嵌套类。
使用内部对象:外部嵌套类。

推荐阅读: 匿名内部类

相关文章