Bird
Raised Fist0
Kotlinprogramming~10 mins

Companion object with interfaces in Kotlin - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Companion object with interfaces
Define Interface
↓
Create Class with Companion Object
↓
Companion Object Implements Interface
↓
Call Interface Method via Companion Object
↓
Execute Method Logic
↓
Output Result
This flow shows how a companion object inside a class can implement an interface and how its methods are called.
Execution Sample
Kotlin
interface Greeter {
    fun greet(): String
}

class Person {
    companion object : Greeter {
        override fun greet() = "Hello from companion!"
    }
}

fun main() {
    println(Person.greet())
}
This code defines an interface, a class with a companion object implementing it, and calls the greet method.
Execution Table
StepActionEvaluationResult
1Define interface Greeter with greet()Interface createdGreeter interface ready
2Define class Person with companion object implementing GreeterCompanion object createdPerson.Companion implements Greeter
3Override greet() in companion objectMethod greet() returns fixed stringgreet() returns "Hello from companion!"
4Call Person.greet() in mainCalls companion object's greet()Returns "Hello from companion!"
5Print returned stringOutput to consoleHello from companion!
6Program endsNo more instructionsExecution stops
💡 Program ends after printing the greeting from companion object
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4Final
Person.CompanionNot createdCreated as Greeter implementergreet() method definedgreet() method calledNo change
Key Moments - 2 Insights
Why can we call greet() directly on Person without creating an instance?
Because greet() is defined inside the companion object which acts like a static member; see execution_table step 4 where Person.greet() calls the companion's method.
How does the companion object implement the interface?
The companion object declares it implements the interface and overrides its methods, as shown in execution_table step 2 and 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what does step 4 represent?
ACalling the greet() method on the companion object
BDefining the interface Greeter
CCreating the Person class
DPrinting the greeting
💡 Hint
Check the 'Action' and 'Evaluation' columns in step 4 of execution_table
At which step is the greet() method overridden in the companion object?
AStep 1
BStep 5
CStep 3
DStep 2
💡 Hint
Look for 'Override greet()' in the 'Action' column of execution_table
If we remove the interface implementation from the companion object, what changes in the execution?
AProgram will print the same greeting
BPerson.greet() call will fail because greet() is not defined
CCompanion object will still implement Greeter
DMain function will not run
💡 Hint
Refer to variable_tracker and execution_table steps 2 and 4 about interface implementation
Concept Snapshot
Companion object can implement interfaces.
Define interface with methods.
Companion object declares interface implementation.
Override interface methods inside companion.
Call methods via ClassName.method() without instance.
Useful for static-like behavior with interface contracts.
Full Transcript
This example shows how a Kotlin companion object inside a class can implement an interface. First, the interface Greeter is defined with a greet() method. Then, the class Person has a companion object that implements Greeter and overrides greet() to return a greeting string. In main, calling Person.greet() calls the companion object's greet method directly, printing the greeting. The companion object acts like a static member but can follow interface contracts. This allows calling interface methods without creating class instances.

Practice

(1/5)
1. What is the main purpose of a companion object in Kotlin?
easy
A. To create multiple instances of a class
B. To inherit from multiple classes
C. To define instance variables for each object
D. To hold static-like members that belong to the class, not instances

Solution

  1. Step 1: Understand companion object role

    A companion object is a special object inside a class that holds members shared by all instances.
  2. Step 2: Compare with instance members

    Unlike instance variables, companion object members belong to the class itself, acting like static members.
  3. Final Answer:

    To hold static-like members that belong to the class, not instances -> Option D
  4. Quick Check:

    Companion object = static-like members [OK]
Hint: Companion object = static members inside class [OK]
Common Mistakes:
  • Thinking companion object creates instances
  • Confusing companion object with instance variables
  • Believing companion object can inherit multiple classes
2. Which of the following is the correct syntax to declare a companion object implementing an interface MyInterface inside a class MyClass?
easy
A. class MyClass { object companion : MyInterface { } }
B. class MyClass { companion object : MyInterface { } }
C. class MyClass { companion MyInterface object { } }
D. class MyClass { companion object implements MyInterface { } }

Solution

  1. Step 1: Recall companion object syntax

    The correct syntax is companion object followed by a colon and the interface name.
  2. Step 2: Check each option

    class MyClass { companion object : MyInterface { } } matches the correct syntax. The other options have incorrect keywords or order.
  3. Final Answer:

    class MyClass { companion object : MyInterface { } } -> Option B
  4. Quick Check:

    companion object : InterfaceName [OK]
Hint: Use 'companion object : Interface' syntax [OK]
Common Mistakes:
  • Using 'implements' keyword instead of ':'
  • Swapping 'object' and 'companion' keywords
  • Omitting the colon before interface name
3. Given the code below, what will be printed when MyClass.printMessage() is called?
interface Printer {
    fun printMessage()
}

class MyClass {
    companion object : Printer {
        override fun printMessage() {
            println("Hello from companion")
        }
    }
}

fun main() {
    MyClass.printMessage()
}
medium
A. Hello from companion
B. No output
C. Compilation error
D. Runtime exception

Solution

  1. Step 1: Understand companion object implementing interface

    The companion object implements Printer and overrides printMessage to print a message.
  2. Step 2: Calling printMessage on class

    Calling MyClass.printMessage() calls the companion object's method, printing the message.
  3. Final Answer:

    Hello from companion -> Option A
  4. Quick Check:

    Companion object method called = prints message [OK]
Hint: Companion object methods called on class directly [OK]
Common Mistakes:
  • Expecting instance creation before method call
  • Thinking printMessage is not accessible on class
  • Assuming compilation error due to interface
4. Identify the error in the following Kotlin code snippet:
interface Logger {
    fun log(message: String)
}

class Service {
    companion object Logger {
        override fun log(message: String) {
            println("Log: $message")
        }
    }
}
medium
A. Companion object must use ':' to implement interface, not name after object
B. Missing override keyword for log function
C. Interface Logger cannot be implemented by companion object
D. Companion object cannot have functions

Solution

  1. Step 1: Check companion object declaration

    The code uses companion object Logger, which names the object but does not implement the interface.
  2. Step 2: Correct syntax for interface implementation

    To implement Logger, it should be companion object : Logger with a colon.
  3. Final Answer:

    Companion object must use ':' to implement interface, not name after object -> Option A
  4. Quick Check:

    Use ':' to implement interface in companion object [OK]
Hint: Use ':' not name to implement interface in companion object [OK]
Common Mistakes:
  • Confusing object name with interface implementation
  • Omitting colon before interface name
  • Thinking companion object cannot implement interfaces
5. You want to create a Kotlin class Calculator with a companion object that implements an interface Operations having a method add(a: Int, b: Int): Int. How can you call add without creating an instance of Calculator?
interface Operations {
    fun add(a: Int, b: Int): Int
}

class Calculator {
    companion object : Operations {
        override fun add(a: Int, b: Int): Int = a + b
    }
}
hard
A. Call Operations.add(5, 3)
B. Create instance and call Calculator().add(5, 3)
C. Call Calculator.add(5, 3)
D. Call Calculator.companion.add(5, 3)

Solution

  1. Step 1: Understand companion object access

    Companion object members can be called directly on the class name like Calculator.add() (syntactic sugar) or explicitly via Calculator.Companion.
  2. Step 2: Check method call options

    Calculator.add(5, 3) is the standard direct call. B requires an instance which doesn't have the method. C calls the interface directly (wrong). D uses incorrect casing ("companion" instead of "Companion").
  3. Final Answer:

    Call Calculator.add(5, 3) -> Option C
  4. Quick Check:

    Class.method() = companion access [OK]
Hint: Companion object methods called on class directly [OK]
Common Mistakes:
  • Using lowercase 'companion' instead of 'Companion'
  • Creating instance unnecessarily
  • Trying to call interface name directly
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard