Bird
Raised Fist0
Kotlinprogramming~5 mins

Class delegation with by keyword in Kotlin - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is class delegation with the <code>by</code> keyword in Kotlin?
Class delegation with <code>by</code> allows a class to delegate the implementation of an interface to another object, reducing boilerplate code.
Click to reveal answer
beginner
How do you declare a class that delegates an interface implementation in Kotlin?
Use the syntax: <br><code>class MyClass(val delegate: InterfaceType) : InterfaceType by delegate</code><br>This means <code>MyClass</code> delegates all <code>InterfaceType</code> methods to <code>delegate</code>.
Click to reveal answer
intermediate
Can a class override some methods when using delegation with <code>by</code>?
Yes. The class can override any delegated method to provide its own implementation, while other methods are delegated automatically.
Click to reveal answer
beginner
What is a real-life analogy for class delegation with <code>by</code>?
Imagine you hire an assistant to handle your emails. You still own the responsibility, but the assistant does the work. Similarly, delegation lets a class pass work to another object.
Click to reveal answer
intermediate
Why use class delegation instead of inheritance in Kotlin?
Delegation promotes composition over inheritance, making code more flexible and easier to maintain by reusing behavior without extending classes.
Click to reveal answer
What does the by keyword do in Kotlin class delegation?
ADefines a new class
BCreates a new interface
CDelegates interface implementation to another object
DOverrides all methods automatically
Which of these is the correct syntax for delegation in Kotlin?
Aclass MyClass extends Interface by d
Bclass MyClass implements Interface by d
Cclass MyClass delegate Interface d
Dclass MyClass(val d: Interface) : Interface by d
Can a class override delegated methods when using by?
AYes, it can override some methods
BNo, all methods are fixed
COnly if the delegate allows it
DOnly private methods can be overridden
What is a benefit of using delegation over inheritance?
AMore flexible and easier to maintain code
BFaster program execution
CLess code to write interfaces
DAutomatic memory management
If a class delegates an interface, who actually executes the interface methods?
AThe delegating class itself
BThe delegate object
CThe Kotlin compiler
DNo one executes them
Explain how class delegation with the by keyword works in Kotlin and why it is useful.
Think about how one object can pass work to another.
You got /4 concepts.
    Describe a real-life example that helps you understand Kotlin's class delegation with by.
    Consider how you might ask someone else to do a task for you.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the by keyword do in Kotlin class delegation?
      easy
      A. It overrides all methods of a class.
      B. It creates a new instance of a class.
      C. It marks a class as abstract.
      D. It lets a class reuse another class's implementation automatically.

      Solution

      1. Step 1: Understand the role of by keyword

        The by keyword in Kotlin is used for class delegation, which means one class can reuse the implementation of another class without rewriting the code.
      2. Step 2: Identify what by does

        It automatically forwards calls to the delegated class, so the delegating class behaves like the delegated one.
      3. Final Answer:

        It lets a class reuse another class's implementation automatically. -> Option D
      4. Quick Check:

        Delegation = reuse implementation [OK]
      Hint: Remember: by means reuse another class's code [OK]
      Common Mistakes:
      • Thinking by creates a new instance
      • Confusing by with inheritance
      • Assuming by overrides methods automatically
      2. Which of the following is the correct syntax to delegate interface Printer to class ConsolePrinter in Kotlin?
      easy
      A. class MyPrinter : Printer by ConsolePrinter()
      B. class MyPrinter implements Printer by ConsolePrinter()
      C. class MyPrinter extends Printer by ConsolePrinter()
      D. class MyPrinter delegate Printer to ConsolePrinter()

      Solution

      1. Step 1: Recall Kotlin delegation syntax

        In Kotlin, delegation uses the syntax: class ClassName : InterfaceName by instance.
      2. Step 2: Match the correct syntax

        class MyPrinter : Printer by ConsolePrinter() matches this pattern exactly: class MyPrinter : Printer by ConsolePrinter().
      3. Final Answer:

        class MyPrinter : Printer by ConsolePrinter() -> Option A
      4. Quick Check:

        Syntax = class X : Interface by instance [OK]
      Hint: Use colon and 'by' for delegation syntax [OK]
      Common Mistakes:
      • Using 'implements' or 'extends' keywords (Java style)
      • Writing 'delegate' keyword which doesn't exist
      • Missing colon before interface name
      3. What is the output of this Kotlin code?
      interface Logger {
          fun log(msg: String)
      }
      
      class ConsoleLogger : Logger {
          override fun log(msg: String) {
              println("Console: $msg")
          }
      }
      
      class AppLogger(logger: Logger) : Logger by logger
      
      fun main() {
          val logger = AppLogger(ConsoleLogger())
          logger.log("Hello")
      }
      medium
      A. No output
      B. Console: Hello
      C. Error: log() not implemented
      D. Hello

      Solution

      1. Step 1: Understand delegation in AppLogger

        The class AppLogger delegates Logger interface to the passed logger instance, which is ConsoleLogger.
      2. Step 2: Trace the log call

        Calling logger.log("Hello") calls ConsoleLogger.log, which prints "Console: Hello".
      3. Final Answer:

        Console: Hello -> Option B
      4. Quick Check:

        Delegation calls delegated method output [OK]
      Hint: Delegated methods run from the delegated instance [OK]
      Common Mistakes:
      • Expecting just 'Hello' without prefix
      • Thinking delegation requires manual override
      • Assuming no output because of delegation
      4. Identify the error in this Kotlin code using class delegation:
      interface Speaker {
          fun speak()
      }
      
      class Human : Speaker {
          override fun speak() {
              println("Hello")
          }
      }
      
      class Robot(speaker: Speaker) : Speaker {
          speak()
      }
      medium
      A. Missing delegation with 'by' keyword in Robot class.
      B. Robot class should not implement Speaker interface.
      C. Human class must not override speak().
      D. speak() method call is correct as is.

      Solution

      1. Step 1: Check Robot class declaration

        Robot implements Speaker but does not delegate or implement speak() method itself.
      2. Step 2: Identify missing delegation

        Robot should delegate Speaker to the passed speaker instance using by speaker to avoid error.
      3. Final Answer:

        Missing delegation with 'by' keyword in Robot class. -> Option A
      4. Quick Check:

        Delegation needs 'by' keyword [OK]
      Hint: Delegate with 'by' or implement all methods [OK]
      Common Mistakes:
      • Calling method directly without delegation
      • Forgetting to use 'by' keyword
      • Assuming interface methods auto-implement
      5. You want to create a class SmartSpeaker that delegates Speaker interface to a Human instance but adds a new method playMusic(). Which is the best way to do this?
      hard
      A. class SmartSpeaker : Human() { fun playMusic() = println("Playing music") }
      B. class SmartSpeaker : Speaker { val human = Human() override fun speak() = human.speak() fun playMusic() = println("Playing music") }
      C. class SmartSpeaker(human: Human) : Speaker by human { fun playMusic() { println("Playing music") } }
      D. class SmartSpeaker(human: Human) : Speaker { fun playMusic() = println("Playing music") }

      Solution

      1. Step 1: Understand delegation with added methods

        Using by human delegates all Speaker methods to Human automatically.
      2. Step 2: Add new method in delegating class

        We can add playMusic() directly in SmartSpeaker without affecting delegation.
      3. Final Answer:

        class SmartSpeaker(human: Human) : Speaker by human { fun playMusic() { println("Playing music") } } -> Option C
      4. Quick Check:

        Delegate with 'by' and add methods [OK]
      Hint: Delegate with 'by' and add new methods in class body [OK]
      Common Mistakes:
      • Not delegating interface methods properly
      • Extending class instead of delegating interface
      • Forgetting to implement interface methods
      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