kotlin的嵌套类和内部类

Kotlin 嵌套类

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

class Outer {
    ... .. ...
    class Nested {
        ... .. ...
    }
}

由于嵌套类是其封闭类的外部(Outer)成员,因此可以使用. 符号访问嵌套类及其成员。

示例:Kotlin 嵌套类的使用示例

class Outer {

    val a = "在嵌套类外部。"

    class Nested {
        val b = "在嵌套类内部。"
        fun callMe() = "从嵌套类内部进行函数调用。"
    }
}

fun main(args: Array<String>) {
    //访问嵌套类的成员
    println(Outer.Nested().b)

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

运行该程序时,输出为:

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

对于 Java 用户

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

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

Kotlin 内部类

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

class Outer {
    val foo = "在嵌套类外部。"

    class Nested {
        //错误! 无法访问外部类的成员。
        fun callMe() = foo
    }
}

fun main(args: Array<String>) {

    val outer = Outer()
    println(outer.Nested().callMe())
}

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

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

示例:Kotlin 内部类的使用

class Outer {

    val a = "在嵌套类外部。"

    inner class Inner {
        fun callMe() = a
    }
}

fun main(args: Array<String>) {

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

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

运行该程序时,输出为:

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值