面试题答案
一键面试Kotlin伴生对象定义方式
在Kotlin中,在类内部使用companion object
关键字来定义伴生对象。例如:
class MyClass {
companion object {
// 伴生对象成员定义在此处
}
}
与Java静态成员异同
- 相同点:
- 都可以通过类名直接访问,而无需创建类的实例。比如Java中通过
ClassName.staticMethod()
,Kotlin中通过ClassName.companionObjectName.method()
(通常可省略companionObjectName
,直接ClassName.method()
)。
- 都可以通过类名直接访问,而无需创建类的实例。比如Java中通过
- 不同点:
- 本质不同:Java静态成员是属于类级别的独立实体;Kotlin伴生对象本质是一个对象,它仍然遵循面向对象的原则,比如可以实现接口等,而Java静态成员不能实现接口。
- 继承关系:Java静态成员不参与继承(子类不能继承父类的静态方法和属性,只能隐藏);Kotlin伴生对象可以被子类继承(通过
companion object
继承父类companion object
实现的接口等)。
Kotlin代码示例
class MyClassWithCompanion {
companion object {
var companionProperty = "I'm a companion property"
fun companionFunction() = println("I'm a companion function")
}
}
fun main() {
println(MyClassWithCompanion.companionProperty)
MyClassWithCompanion.companionFunction()
}