kotlin嵌套类、内部类

本文详细介绍了Kotlin中的嵌套类(Nested Classes)和内部类(Inner Classes),包括它们的访问权限和使用场景。嵌套类类似于Java的静态内部类,无法访问外部类的非静态成员。而内部类可以访问外部类的所有成员,它隐式持有一个对外部类的引用。此外,还展示了匿名内部类的使用,通过对象表达式和Lambda表达式创建。
摘要由CSDN通过智能技术生成

版权声明:本文为原博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_32115439/article/details/73692072

1、嵌套类(Nested Classes)

类可以嵌套在其他类中,不能访问外部类成员:

class Outer {
    private val bar: Int = 1

    class Nest {
        //嵌套类不能访问外部类成员,相当于java的static静态内部类
        fun foo() = 2
    }
}

fun main(args: Array<String>) {
    //创建嵌套类Nest对象,不需要外部类Outer对象
    println(Outer.Nest().foo())
}

2、内部类(Inner Classes)

如果需要去访问外部类的成员,需要用inner修饰符来标注被嵌套的类。内部类会隐式持有对外部类的引用

使用inner来声明Nested类后,就相当于将之声明为非静态内部类,因此

类标记为inner,可以访问外部类成员:

class Outer {
    private val bar: Int = 1

    inner class Inner {
        //内部类可以访问外部类成员,可看作外部类对象的一个成员
        fun foo() = bar
    }
}

fun main(args: Array<String>) {
    //创建内部类Inner对象,需要外部类Outer对象
    val outer = Outer()
    println(outer.Inner().foo())
}

3、匿名内部类(Anonymous inner classes)

用对象表达式,创建匿名内部类的实例:

window.addMouseListener(
   object:MouseAdapter(){
       override fun mouseClicked(e: MouseEvent){
          ...
       }
       
       override fun mouseEntered(e MouseEvent){
       }
   }
)
当接口仅有一个接口方法/函数,可用lambda表达式省略接口方法/函数:
val listener = ActionListener{
   println("clicked")//lambda表达式-简化的匿名内部类
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值