当前位置:嗨网首页>书籍在线阅读

02-类的声明

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

5.1.1 类的声明

Kotlin使用关键字class来声明类。类的声明由类名、类头和由大括号包围的类体构成。类头和类体都是可选的。如果一个类没有类体,可以省略大括号。代码如下。

//声明普通类
class Invoice {
 //其他类体
}
//无类体的类声明
class EmptyClass

1.嵌套类

类中可以嵌套其他的类,和Java一样,嵌套类不能引用外部类的成员变量。代码如下。

class Outer {
    var bar: Int = 1
    class Nested {
        fun foo() = 2
    }
}
val demo = Outer.Nested().foo()    // 输出2

2.内部类

使用inner标记的嵌套类为内部类,内部类可以引用外部类的成员和对象,引用外部类中对象的方式为var 变量名=this@外部类名。

class Outer {
      private val bar: Int = 1
      inner class Inner {
          fun foo() = bar
          var [email protected]   //引用外部类的成员
    }
}
val demo = Outer().Inner().foo()    //输出1

在类成员中,this指代该类的当前对象。而在扩展函数或者带接收者的函数中,this表示在点左侧传递的接收者参数。

3.匿名内部类

没有名字的内部类被称为匿名内部类,使用匿名内部类必须继承一个父类或实现一个接口,匿名内部类可以简化代码编写。使用对象表达式来创建匿名内部类对象,可以避免重写抽象类的子类和接口的实现类。例如,使用对象表达式创建匿名内部类的实例。

window.addMouseListener(object : MouseAdapter() {
    override fun mouseClicked(e: MouseEvent) {
        // …
    }
    override fun mouseEntered(e: MouseEvent) {
        // …
    }
})

如果对象实例是一个函数接口,还可以使用Lambda表达式来实现。

val listener = ActionListener { 
   println("clicked") 
}