MST

星途 面试题库

面试题:Kotlin伴生对象的基本使用及特点

请简述Kotlin伴生对象的定义方式,它与Java中的静态成员有何异同?在Kotlin代码中创建一个包含伴生对象的类,并在伴生对象中定义一个函数和一个属性,然后在主函数中调用它们。
16.6万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试

Kotlin伴生对象定义方式

在Kotlin中,在类内部使用companion object关键字来定义伴生对象。例如:

class MyClass {
    companion object {
        // 伴生对象成员定义在此处
    }
}

与Java静态成员异同

  • 相同点
    • 都可以通过类名直接访问,而无需创建类的实例。比如Java中通过ClassName.staticMethod(),Kotlin中通过ClassName.companionObjectName.method() (通常可省略companionObjectName,直接ClassName.method())。
  • 不同点
    • 本质不同: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()
}