# Kotlin 伴随对象

> 原文： [https://www.programiz.com/kotlin-programming/companion-objects](https://www.programiz.com/kotlin-programming/companion-objects)

#### 在本文中，您将借助示例学习在 Kotlin 程序中创建和使用伴随对象。

在介绍伴随对象之前，让我们以访问类成员的示例为例。

```kt
class Person {
    fun callMe() = println("I'm called.")
}

fun main(args: Array<String>) {
    val p1 = Person()

    // calling callMe() method using object p1
    p1.callMe()    
}

```

在这里，我们创建了`Person`类的对象`p1`来调用`callMe()`方法。 这就是正常情况下的工作方式。

但是，在 Kotlin 中，您还可以通过使用类名来调用`callMe()`方法，即在这种情况下使用`Person`。 为此，您需要通过使用`companion`关键字标记[对象声明](https://www.programiz.com/kotlin-programming/object-singleton#object-declarations "Kotlin object declaration")来创建伴随对象。

* * *

### 示例：伴随对象

```kt
class Person {
    companion object Test {
        fun callMe() = println("I'm called.")
    }
}

fun main(args: Array<String>) {
    Person.callMe()
}

```

运行该程序时，输出为：

```kt
I'm called.
```

在程序中，`test`对象声明用关键字`companion`标记，以创建伴随对象。 因此，可以通过使用以下类的名称来调用`callMe()`方法：

```kt
Person.callMe()
```

* * *

伴随对象的名称是可选的，可以省略。

```kt
class Person {

    // name of the companion object is omitted
    companion object {
        fun callMe() = println("I'm called.")
    }
}

fun main(args: Array<String>) {
    Person.callMe()
}
```

* * *

如果您熟悉 Java，则可以将伴随对象与静态方法相关联（即使它们在内部的工作方式完全不同）。

伴随对象可以访问该类的私有成员。 因此，它们可用于实现[工厂方法模式](https://stackoverflow.com/questions/69849/factory-pattern-when-to-use-factory-methods "Kotlin Factory Pattern")。