1.定义在类内部的类
2.与类成员有相似的访问控制
3.默认是静态内部类,非静态用inner关键字
4.内部类调用外部成员使用this@外部成员类名.成员变量名
class Outside {
var a: Int = 100
/**
* inner非静态内部类
*/
inner class Inside {
val a: Int = 50
fun test(): Unit {
/**
* 调用外部类的成员变量
*/
println(this@Outside.a)
}
}
}
fun main(args: Array<String>) {
var inside = Outside().Inside()
inside.test()
}
-------------------------------------------------------------------------------------------------------------------
匿名内部类
1.没有定义名字的内部类
2.类名编译时生成类似 类名$1.class
interface Tv {
fun wacthTv()
}
abstract class Radio {
abstract fun listenRadio()
}
class View {
var tv: Tv? = null
}
fun main(args: Array<String>) {
val view = View()
/**
* 实现匿名方法以及集成其他类
*/
view.tv = object : Tv, Radio() {
override fun listenRadio() {
}
override fun wacthTv() {
}
}
}