文章目录
- 一、object 关键字
- 二、对象声明
- 三、对象表达式
- 四、伴生对象
一、object 关键字
object 关键字 可以定义 单例类 ; 使用 object 关键字修饰的类 , 只能创建一个实例对象 ;
object 有 3 种使用方式 :
- 对象声明 : 定义单例类 ;
- 对象表达式 : 定义匿名内部类 ;
- 伴生对象 : 定义静态成员 ;
二、对象声明
使用 object 关键字 进行 对象声明 , 就是 定义单例类 ;
对象声明格式 :
代码语言:javascript复制object 单例类类名 {}
代码示例 :
代码语言:javascript复制object Student {
var name = "Tom"
var age = 18
fun sayHello() {
println("$name $age years old, say hello.")
}
}
fun main() {
// 调用单例类
Student.sayHello()
}
执行结果 :
代码语言:javascript复制Tom 18 years old, say hello.
三、对象表达式
使用 object 关键字 声明 对象表达式 , 就是 Kotlin 中的匿名内部类 ; 该类只使用一次 ;
定义 对象表达式 ( 匿名内部类 ) 是由于要 修改 类中的函数 , 常见的是要 覆盖重写函数 , 该 类 以及要 重写的函数 必须是用 open 修饰 ;
使用 对象表达式 创建出来的 匿名内部类 对象 , 只有 1 个实例对象 ;
下面的 对象表达式 ( 匿名内部类 ) 是定义 Student 类的子类 , 因此 Student 类必须使用 open 修饰 , 在匿名内部类内部重写了 sayHello 函数 , 因此 在 Student 类中的 sayHello 函数 必须使用 open 进行修饰 ;
代码示例 :
代码语言:javascript复制open class Student {
var name = "Tom"
var age = 18
open fun sayHello() {
println("$name $age years old, say hello.")
}
}
fun main() {
val student = object : Student() {
override fun sayHello() {
super.sayHello()
println("匿名内部类添加的代码逻辑")
}
}
student.sayHello()
}
执行结果 :
代码语言:javascript复制Tom 18 years old, say hello.
匿名内部类添加的代码逻辑
四、伴生对象
使用 companion object 定义的类中的 伴生对象 , 内部的 成员 和 函数 相当于 静态成员 ;
一个类中只能有一个伴生对象 ;
伴生对象 的 成员函数 和 成员属性 , 可以直接使用类名进行访问 ;
代码示例 :
代码语言:javascript复制open class Student {
companion object {
const val DELTA = 10
fun delta() {
println("delta is $DELTA")
}
}
var name = "Tom"
var age = 18
}
fun main() {
println(Student.DELTA)
Student.delta()
}
执行结果 :
代码语言:javascript复制10
delta is 10