对象表达式的格式:
object[:若干个父类型,中间用逗号隔开]{}
override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main10)val myObject = object : MyInterface {override fun myPrint(i: Int) {println("i的值是$i")}}myObject.myPrint(100)}
这个是对象表达式
object MyObject{fun method() ="hello world
}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)MyObject.method()}
这个是对象声明语法。这个后面是有一个名字的,对象表达式是没有名字的。
这些对象可以有超类型:
object DefaultListener : MouseAdapter() {override fun mouseClicked(e: MouseEvent) { …… }override fun mouseEntered(e: MouseEvent) { …… }
}
对象声明和对象表达式的差别:
- 对象表达式可以赋值给一个变量;但是对象是不可以的赋值给一个变量,对象声明本身是声明了一个对象,是不能直接放到等号右边的。
- 对象表达式是立刻初始化的或者执行的;对象声明是延迟初始化的,在首次访问的时候进行。
- 伴生对象是在其所对应的类被加载时初始化的,对应于Java的静态初始化。