一、嵌套类
**嵌套类,即指一个类可以嵌套在其他类中。**简单的说就是在一个类里又声明了一个类。
示例:
class Out{
// 外部类
val outNumber = 1
class In {
// 嵌套类
val inNumber = 2
fun init(){
println("执行了嵌套类的init方法")
}
}
}
- )调用嵌套类的属性或方法的格式为:
外部类.嵌套类().嵌套类方法/属性。
如下:
Out.In().inNumber
- )在调用的时候,嵌套类是需要实例化的,外部类不需要实例化
- )嵌套类不能使用外部类的属性和成员
2.内部类
内部类和嵌套类不相同
声明一个内部类使用inner关键字。
声明格式:inner class 类名(参数){}
示例:
class Out{
// 外部类
val outNumber = 1
inner class In {
// 内部类
val inNumber = 2
fun init(){
println("执行了嵌套类的init方法")
}
}
}
- )调用内部类的属性或方法的格式为:
外部类().内部类().内部类方法/属性。
如下:
Out().In().inNumber
- )在调用内部类的时候,外部类和内部类都是需要实例化的。
- )内部类不能使用外部类的属性和成员
3.局部类
- )局部类:定义在方法中的类。
局部类只能在定义该局部类的方法中使用。 - )定义在实例方法中的局部类可以访问外部类的所有变量和方法。但不能修改
- )局部类中的可以定义属性、方法。并且可以修改局部方法中的变量
示例:
class Out{
// 外部类
fun doOut(){
//外部类的一个方法
class PartClass{
// 局部类,定义在方中
fun init(){
Log.e("---","运行了局部类的init()方法")
}
}
val part = PartClass()
part.init()
}
}
4. 匿名内部类
这里只做简单介绍,我们将会在下一节对象表达式中着重理解匿名内部类到底是什么。
匿名类概念:
- )顾名思义,匿名类是没有名字的类,匿名类可以使你的代码更加简洁
- )可以在定义一个类的同时对其进行实例化。
- )匿名类与局部类很相似,不同的是它没有类名,如果某个局部类你只需要使用一次,就可以使用匿名类代替局部类。
- )匿名类是表达式,不是常规的类
- )由于匿名类没有类名,那么除了定义它的地方,其他地方无法调用,所以匿名类也可以叫匿名内部类
- )Kotlin 使用对象表达式创建匿名内部类实例
示例:
window.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) {
…… }
override fun mouseEntered(e: MouseEvent) {
…… }
})