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

官方文档: 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