嵌套类和内部类在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中匿名内部类的是接口和抽象类的延伸一致。
Java与Kotlin类嵌套对比
本文详细对比了Java和Kotlin中嵌套类与内部类的定义及使用方式,解释了静态与非静态嵌套类的区别,以及内部类如何引用外部类的成员。
2万+

被折叠的 条评论
为什么被折叠?



