Companion Objects

Created By: Geoffrey Challen
/ Updated: 2022-09-22

As we continue, we begin by describing a feature of Kotlin objects called companion objects. We'll also introduce introduce one new piece of object syntax.

Warm Up Debugging Challenge

But first, let's warm up with another graded debugging challenge!


this is a keyword in Kotlin that you can use in your instance methods. It always refers to the current instance that is executing the method.

So this:

is equivalent to this:

The example above is one use of this. However, we'll usually just go the first route, and choose parameter names that don't conflict with our instance variable names. This helps avoid mistakes.

However, there is one place where we do and will use this. Let's go through it together:

Discuss the use of this in constructor overloading.

Companion Objects

Up until now the properties and methods that we've been establishing on our Kotlin objects are instance properties and methods. Meaning each instance of an class has its own:

Even though they share an implementation of doubleName, instances each act like they have their own doubleName method.

However, Kotlin also allows us to create methods that are provided by the class and can be accessed without an instance. We do this using something called a companion object. Let's see how:

Show an example of a companion object method: maybe one that prints a greeting giving a string. So how you can call it from the Person but not on an instance.

Companion v. Instance

Companion object methods cannot access instance variables. Let's look at why, and the differences between class and instance methods:

Distinguish between class and instance methods.

Uses for Companion Objects

In Kotlin, we can create methods that are not associated with any class, simply by declaring them outside a class body:

This works completely fine, and limits the degree to which we need to use companion objects. So if you have a method that doesn't need an instance, you can either declare it outside the class or in a companion object.

Show how to complete the homework problem above. Feel free to cover multiple approaches!

Companion Fields

Companion objects can also declare fields, just like instances:

This can be a good place to put constant values, as shown above, particularly if, like a method, they really belong with the class that defines the companion object.

You can also define non-constant (i.e., var) properties on companion objects. However. This is extremely rare, and very easy to get wrong. So much so that we won't bother demonstrating how to do it!

Show how to complete the homework problem above. Feel free to cover multiple approaches!

Show how to complete the homework problem above. Feel free to cover multiple approaches!

More Practice

Need more practice? Head over to the practice page.