Kotlin基础语法 十一、lamdba表达式解析一(匿名内部类)

一、嵌套类

**嵌套类,即指一个类可以嵌套在其他类中。**简单的说就是在一个类里又声明了一个类。
示例:

class Out{
    
               // 外部类
    val outNumber = 1

    class In {
    
          // 嵌套类
        val inNumber = 2
        fun init(){
    
    
            println("执行了嵌套类的init方法")
        }
    }
}
  1. )调用嵌套类的属性或方法的格式为:
    外部类.嵌套类().嵌套类方法/属性。
    如下:
Out.In().inNumber
  1. )在调用的时候,嵌套类是需要实例化的,外部类不需要实例化
  2. )嵌套类不能使用外部类的属性和成员

2.内部类

内部类和嵌套类不相同
声明一个内部类使用inner关键字。
声明格式:inner class 类名(参数){}

示例:

class Out{
    
               // 外部类
    val outNumber = 1

  inner  class In {
    
          // 内部类
        val inNumber = 2
        fun init(){
    
    
            println("执行了嵌套类的init方法")
        }
    }
}
  1. )调用内部类的属性或方法的格式为:
    外部类().内部类().内部类方法/属性。
    如下:
Out().In().inNumber
  1. 在调用内部类的时候,外部类和内部类都是需要实例化的。
  2. 内部类不能使用外部类的属性和成员

3.局部类

  1. 局部类:定义在方法中的类。
    局部类只能在定义该局部类的方法中使用。
  2. 定义在实例方法中的局部类可以访问外部类的所有变量和方法。但不能修改
  3. 局部类中的可以定义属性、方法。并且可以修改局部方法中的变量
    示例:
class Out{
    
        // 外部类
    fun doOut(){
    
      //外部类的一个方法
        class PartClass{
    
     // 局部类,定义在方中
            fun init(){
    
    
                Log.e("---","运行了局部类的init()方法")
            }
        }
        val part = PartClass()
        part.init()
    }
}

4. 匿名内部类

这里只做简单介绍,我们将会在下一节对象表达式中着重理解匿名内部类到底是什么。

匿名类概念:

  1. )顾名思义,匿名类是没有名字的类,匿名类可以使你的代码更加简洁
  2. 可以在定义一个类的同时对其进行实例化。
  3. 匿名类与局部类很相似,不同的是它没有类名,如果某个局部类你只需要使用一次,就可以使用匿名类代替局部类。
  4. 匿名类是表达式,不是常规的类
  5. 由于匿名类没有类名,那么除了定义它的地方,其他地方无法调用,所以匿名类也可以叫匿名内部类
  6. Kotlin 使用对象表达式创建匿名内部类实例

示例:

window.addMouseListener(object : MouseAdapter() {
    
    

    override fun mouseClicked(e: MouseEvent) {
    
     …… }

    override fun mouseEntered(e: MouseEvent) {
    
     …… }
})

猜你喜欢

转载自blog.csdn.net/weixin_43864176/article/details/123743909