嵌套類和內部類在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中匿名內部類的是接口和抽象類的延伸一致。