Kotlin-16.嵌套类/内部类(Nested Classes/Inner classes)

来源:互联网 发布:linux获取cpu核心数 编辑:程序博客网 时间:2024/05/22 06:51

官方文档: http://kotlinlang.org/docs/reference/nested-classes.html

1.嵌套类(Nested Classes)

类可以嵌套在其他类中,不能访问外部类成员:    class Outer {        private val bar: Int = 1        class Nest {            //嵌套类不能访问外部类成员,相当于java的static 静态内部类            fun foo() = 2        }    }    fun main(args: Array<String>) {        //创建嵌套类Nest对象,不需要外部类Outer对象        println(Outer.Nest().foo()) //输出2    }

2.内部类(Inner classes)

类标记为inner,可以访问外部类成员:    class Outer {        private val bar: Int = 1        inner class Inner {            //内部类可以访问外部类成员,可看作外部类对象的一个成员            fun foo() = bar        }    }    fun main(args: Array<String>) {        //创建内部类Inner对象,需要外部类Outer对象        val outer = Outer()        println(outer.Inner().foo()) //输出1    }

3.匿名内部类(Anonymous inner classes)

用对象表达式,创建匿名内部类的实例:    window.addMouseListener(        object: MouseAdapter() {            override fun mouseClicked(e: MouseEvent) {                ...            }            override fun mouseEntered(e: MouseEvent){                ...            }        }    )当接口仅有一个接口方法/函数,可用lambda表达式省略接口方法/函数:           val listener = ActionListener{        println("clicked") //lambda表达式-简化的匿名内部类    }

简书:http://www.jianshu.com/p/7f8c7c535cc0
CSDN博客: http://blog.csdn.net/qq_32115439/article/details/73692072
GitHub博客:http://lioil.win/2017/06/24/Kotlin-nested-classes.html
Coding博客:http://c.lioil.win/2017/06/24/Kotlin-nested-classes.html