[Kotlin] 内部类

Posted

tags:

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

参考技术A

内部类 也叫做嵌套类,在Java里是一个被大家经常使用到的东西。内部类除了匿名内部类外还分为三种,一种是可以自由访问外部类成员变量和方法的 成员内部类 ,一种是可以被独立构造实例且和外部类完全剥离的 静态内部类 ,一种是作用域和生命周期都只处在一个方法中的 方法内部类 ,但这种内部类我们不讨论。

Kotlin的大部分用法和Java差不多,可用Kotlin按照Java的写法来写内部类,你会发现不管是直接引用外部类的成员和方法还是用 this@ 去显式引用外部类的成员和方法,都不管用,为嘛咧?
因为Kotlin默认内部类是 静态内部类 ,和Java相反。

接下来就看看Kotlin中的两种静态类的写法,假设我们外部类叫做 Outer ,内部类叫做 Inner

关键在于需要用 inner 关键字来修饰内部类的声明,才能让Kotlin中默认的静态内部类变为非静态的成员内部类

下次有机会说说匿名内部类的写法 = ̄ω ̄=

kotlin内部类与嵌套类

kotlin内部类与嵌套类

简单的说,kotlin嵌套类相当于java的静态内部类,kotlin内部类相当于java普通内部类。

class OutClass 
    val ocval = "一个外部类变量值"

    //嵌套类,相当于Java的静态内部类
    class NestedClass 
        fun test1() = "嵌套内部类函数"

        //错误,编译无法通过
        //fun test2() = "嵌套内部类引用外部类变量$ocval"
    

    //普通内部类
    inner class InnerClass 
        fun test1() = "内部类引用外部类变量$ocval"
    



fun main(args: Array<String>) 
    println(OutClass.NestedClass().test1())

    var ic = OutClass().InnerClass()
    println(ic.test1())

输出:

以上是关于[Kotlin] 内部类的主要内容,如果未能解决你的问题,请参考以下文章

kotlin内部类与嵌套类

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

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

深入kotlin - 嵌套类和内部类

深入kotlin - 嵌套类和内部类

Kotlin中级- - - Kotlin类之数据类密封类内部类.md