Kotlin学习笔记(11)- 内部类和嵌套类
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正。如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!
Kotlin学习笔记(1)- 环境配置
Kotlin学习笔记(2)- 空安全
Kotlin学习笔记(3)- 语法
Kotlin学习笔记(4)- 流程控制
Kotlin学习笔记(5)- 类
Kotlin学习笔记(6)- 属性
Kotlin学习笔记(7)- 接口
Kotlin学习笔记(8)- 扩展
Kotlin学习笔记(8)- 扩展(续)
Kotlin学习笔记(9)- 数据类
Kotlin学习笔记(10)- 泛型
Kotlin学习笔记(11)- 内部类和嵌套类
Kotlin学习笔记(12)- 委托
Kotlin学习笔记(13)- 函数式编程
Kotlin学习笔记(14)- lambda
一、嵌套类
嵌套类顾名思义,就是嵌套在其他类中的类。而嵌套类外部的类一般被称为包装类或者外部类。
class Outter{
class Nested{
fun execute(){
Log.d("test", "Nested -> execute")
}
}
}
// 调用
Outter.Nested().execute()
//输出
Nested -> execute
二、内部类
内部类和嵌套类有些类似,不同点是内部类用关键字inner
修饰。
class Outter{
val testVal = "test"
inner class Inner{
fun execute(){
Log.d("test", "Inner -> execute : can read testVal=$testVal")
}
}
}
// 调用
val outter = Outter()
outter.Inner().execute()
// 输出
Inner -> execute : can read testVal=test
两小段代码看完,对内部类和嵌套类都有了点了解,东西不多,也不难。那么我们来对比看一下他们在使用中有什么不同,当然这只是我总结的很浅的不同点,毕竟我也是刚学 : )
-
嵌套类可以直接创建实例,方式是包装类.嵌套类
val nested : Outter.Nested()
-
内部类不能直接创建实例,需要通过外部类调用
val outter = Outter() outter.Inner().execute()
-
嵌套类不能引用包装类的成员;内部类会带有一个对外部包装类的对象的引用,可以访问外部类中的成员属性和成员函数。
三、匿名内部类
使用对象表达式创建匿名内部类实例
text.setOnClickListener(object : View.OnClickListener{
override fun onClick(p0: View?) {
Log.d("test", p0.string())
}
})
完整的写法应该是这样,但是通常我们用的是简捷的写法
text.setOnClickListener {
Log.d("test", it.string())
}
当然还有更简洁的写法,那就要用到lambda了。请看我后面的文章《Kotlin学习笔记(14)- lambda》。
关于
object
的用法,可以看下刘大V的一篇文章:区别Kotlin中的object和companion object关键字。