对比Java学Kotlin嵌套类和内部类

Posted 陈蒙_

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对比Java学Kotlin嵌套类和内部类相关的知识,希望对你有一定的参考价值。

嵌套类

在 Java 中中,有静态嵌套类和非静态嵌套类:

class Outer {
    static StaticInner {} // 静态嵌套类
    class Inner {} // 非静态嵌套类
}

我们知道 Kotlin 语言中没有 static 关键字,我们可以 Kotlin 的接口或类体中定义嵌套类:

interface OuterInterface {
    class InnerClass
    interface InnerInterface
}

class OuterClass() {
    class Nested() {
        fun foo() = 1
    }
    interface InnerInterace {}
}

其用法等同于 Java 的静态嵌套类,嵌套类无法获取外部类的成员变量和成员方法:

val f = Outer.Nested().foo() // 1

内部类

如果我们想让 Kotlin 的嵌套类获取外部类的成员,可以用 inner 关键字来实现:

class Outer() {
    inner class Inner() {
        fun foo() = 1
    }
}

inner 内部类拥有外部类的引用,可以访问外部类的成员变量和成员函数,其使用方法相当于 Java 的非静态嵌套类:

val i = Outer().Inner().foo() // 1

匿名内部类

我们还可以使用 object 关键字来新建匿名内部类:

class Outer() {
    inner class Inner() {
        open fun foo() = 1
    }
}

val i = object : Outer.Inner() {
    override fun foo() = 2
}

以上是关于对比Java学Kotlin嵌套类和内部类的主要内容,如果未能解决你的问题,请参考以下文章

对比Java学Kotlin嵌套类和内部类

对比Java学Kotlin官方文档目录

对比Java学Kotlin类和对象

Kotlin基础(十三) 嵌套类内部类和匿名内部类

深入kotlin - 嵌套类和内部类

深入kotlin - 嵌套类和内部类