Kotlin 笔记:内部类与嵌套类

28 篇文章 0 订阅
10 篇文章 0 订阅

一、与 Java 的对比

形式 \ 语言KotlinJava
一个 class 内声明另一个 class嵌套类内部类
inner内部类
static静态内部类
名称含义
内部类(Java、Kotlin)持有外部类的引用
嵌套类(Kotlin)不持有外部类的引用
静态内部类(Java)不持有外部类的引用

二、嵌套类

形式:没有关键词,直接在其他类内部声明。

这种形式是最普遍的形式,因为没有其他关键字进行修饰,可以称为默认形式。

Java 比较开放,认为默认形式的类可以访问外部类。

Kotlin 比较封闭,认为默认形式的类不能访问外部类。

class Outer {
    private val bar: Int = 1
    class Nested {
        fun foo() = 2
    }
}

val demo = Outer.Nested().foo() // == 2

三、内部类

形式:在嵌套类的基础上添加 inner 关键字。

Kotlin 的默认形式不能访问外部,要想访问,需要额外添加一个 inner 关键字。

Java 的默认形式可以访问外部,要想不访问,需要额外添加一个 static 关键字。

class Outer {
    private val bar: Int = 1
    inner class Inner {
        fun foo() = bar
    }
}

val demo = Outer().Inner().foo() // == 1

四、匿名内部类

匿名内部类与 inner 就没有关系了,需要使用 object 关键字。

window.addMouseListener(object : MouseAdapter() {

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

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

如果匿名内部类只有一个方法,可以简化为一个 lambda 表达式。

val listener = ActionListener { println("clicked") }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值