kotlin -- 嵌套類 內部類 匿名內部類

嵌套類和內部類在java中於Kotlin中的對應關係

類A在另一個類B中聲明 在Java中 在Kotlin中
嵌套類(不存儲外部類的引用) static class A class A
內部類(存儲外不類的引用) class A inner class A

例子:

class Test {
    var v = "成員屬性"

    /**
     * 嵌套類
     */
    class Nested {
        fun nestedTest() {
            println("嵌套類中的方法")
        }
    }

    /**
     * 內部類,持有外部類的引用
     */
    inner class Inner {
        fun innerTest() {
            println("內部類中的方法")
            //調用外部類
            val test = this@Test
        }
    }

    fun setInterFace(test: TestInterFace) {
        test.test()
    }

    /**
     * 接口
     */
    interface TestInterFace {
        fun test()
    }

}

調用:

 //調用嵌套類
        Test.Nested().nestedTest()

        //調用內部類
        Test().Inner().innerTest()

        //接口對象
        Test().setInterFace(object : Test.TestInterFace {
            override fun test() {
                println("匿名內部類的實現")
            }
        })
  • 類中可以嵌套類,創建嵌套類對象方式 : 外部類名.嵌套類(),嵌套類引用不了外部類的成員,這和Java類似,相當於隱式的外部類。

  • 用inner標記的嵌套類是內部類,創建內部類的對象的方式 : 外部類名().Inner()。可以引用外部類的成員,引用外部類的this對象的方式 : var v=this@外部類名

  • 通過對象表達式來 創建匿名內部類的對象,可以避免重寫抽象類的子類和接口的實現類,這和Java中匿名內部類的是接口和抽象類的延伸一致。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章