Bird
Raised Fist0
LLDsystem_design~5 mins

Composition over inheritance in LLD - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is composition in system design?
Composition means building complex objects by combining simpler ones, like assembling Lego blocks to create a model. It focuses on 'has-a' relationships.
Click to reveal answer
beginner
How does inheritance differ from composition?
Inheritance creates an 'is-a' relationship by extending a class, while composition builds objects by including other objects, promoting flexibility and reuse.
Click to reveal answer
intermediate
Why is composition often preferred over inheritance?
Composition avoids tight coupling and rigid hierarchies, making systems easier to change and extend, like swapping parts in a machine instead of redesigning it.
Click to reveal answer
beginner
Give an example of composition in a real-world system.
A car is composed of an engine, wheels, and seats. Each part can be changed independently without affecting the whole car's structure.
Click to reveal answer
intermediate
What problem can inheritance cause that composition helps solve?
Inheritance can cause fragile base class problems and deep hierarchies that are hard to maintain. Composition allows changing behavior by replacing parts without breaking the system.
Click to reveal answer
Which relationship best describes composition?
A'is-a' relationship
B'has-a' relationship
CInheritance hierarchy
DPolymorphism only
What is a key benefit of using composition over inheritance?
AForces tight coupling
BCreates deep class hierarchies
CRequires less code
DEasier to change parts independently
Which is a drawback of inheritance that composition avoids?
AFragile base class problem
BCode reuse
CEncapsulation
DModularity
In system design, what does inheritance represent?
A'is-a' relationship
B'has-a' relationship
CObject composition
DLoose coupling
Which example best illustrates composition?
AA dog is an animal
BA manager extends employee
CA car has an engine and wheels
DA class inherits methods
Explain composition over inheritance with a simple real-life example.
Think about how objects can be built from smaller parts.
You got /4 concepts.
    Describe the main problems inheritance can cause and how composition helps avoid them.
    Consider why changing a base class can break many subclasses.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main advantage of using composition over inheritance in system design?
      easy
      A. It allows combining simple parts to build complex behavior flexibly.
      B. It forces a strict class hierarchy that is easier to follow.
      C. It eliminates the need for interfaces or contracts.
      D. It automatically improves system performance.

      Solution

      1. Step 1: Understand composition concept

        Composition means building complex systems by combining smaller, reusable parts.
      2. Step 2: Compare with inheritance

        Inheritance creates rigid class hierarchies, while composition offers flexibility and modularity.
      3. Final Answer:

        It allows combining simple parts to build complex behavior flexibly. -> Option A
      4. Quick Check:

        Composition = Flexible combination [OK]
      Hint: Composition means combining parts, inheritance means extending classes [OK]
      Common Mistakes:
      • Thinking inheritance is always more flexible
      • Confusing composition with interface implementation
      • Believing composition removes need for design contracts
      2. Which of the following code snippets correctly demonstrates composition in a class design?
      easy
      A. class Car extends Engine { }
      B. class Engine { } class Car { Engine engine; }
      C. class Car implements Engine { }
      D. class Engine extends Car { }

      Solution

      1. Step 1: Identify composition syntax

        Composition means a class contains an instance of another class as a member.
      2. Step 2: Analyze options

        class Engine { } class Car { Engine engine; } shows Car has an Engine instance, which is composition. Others use inheritance or interface incorrectly.
      3. Final Answer:

        class Engine { } class Car { Engine engine; } -> Option B
      4. Quick Check:

        Composition = class has member object [OK]
      Hint: Composition means 'has-a' relationship, not 'is-a' [OK]
      Common Mistakes:
      • Confusing inheritance (extends) with composition
      • Using implements keyword incorrectly for composition
      • Assuming inheritance is composition
      3. Given the following code, what will be the output?
      class Battery {
        int capacity = 100;
      }
      class Phone {
        Battery battery = new Battery();
        int getBatteryCapacity() {
          return battery.capacity;
        }
      }
      Phone p = new Phone();
      System.out.println(p.getBatteryCapacity());
      medium
      A. Compilation error
      B. 0
      C. NullPointerException
      D. 100

      Solution

      1. Step 1: Understand composition usage

        Phone class contains a Battery instance initialized with capacity 100.
      2. Step 2: Trace method call

        Calling getBatteryCapacity returns battery.capacity which is 100.
      3. Final Answer:

        100 -> Option D
      4. Quick Check:

        Composition returns member value correctly [OK]
      Hint: Composition accesses member objects directly [OK]
      Common Mistakes:
      • Assuming battery is null without initialization
      • Confusing inheritance with composition access
      • Expecting compilation error due to missing constructor
      4. Identify the error in the following code that tries to use composition:
      class Screen { }
      class Laptop {
        Screen screen;
        Laptop() {
          screen = null;
        }
        void display() {
          System.out.println(screen.toString());
        }
      }
      medium
      A. screen is not initialized before use, causing NullPointerException
      B. Screen class should extend Laptop for composition
      C. display method should return a value, not print
      D. Laptop constructor should not assign null to screen

      Solution

      1. Step 1: Check initialization of composed object

        screen is assigned null in constructor, so it is not a valid object.
      2. Step 2: Analyze method usage

        Calling screen.toString() on null causes NullPointerException at runtime.
      3. Final Answer:

        screen is not initialized before use, causing NullPointerException -> Option A
      4. Quick Check:

        Null object in composition causes runtime error [OK]
      Hint: Always initialize composed objects before use [OK]
      Common Mistakes:
      • Thinking inheritance is needed for composition
      • Ignoring null initialization issues
      • Confusing method return type with composition error
      5. You are designing a payment system where different payment methods (credit card, PayPal, crypto) share common steps but have unique processing. How does using composition over inheritance improve your design?
      hard
      A. Composition requires duplicating code for each payment method, increasing maintenance.
      B. Inheritance forces all payment methods to share the same code, reducing flexibility.
      C. By composing payment method objects, you can add or change methods without altering a deep class hierarchy.
      D. Inheritance allows runtime swapping of payment methods more easily than composition.

      Solution

      1. Step 1: Understand payment system requirements

        Different payment methods share steps but differ in processing details.
      2. Step 2: Analyze composition benefits

        Composition lets you build payment methods as separate objects combined in the system, enabling easy addition or change without deep inheritance.
      3. Step 3: Contrast with inheritance

        Inheritance creates rigid hierarchies that are hard to modify and extend for new payment types.
      4. Final Answer:

        By composing payment method objects, you can add or change methods without altering a deep class hierarchy. -> Option C
      5. Quick Check:

        Composition = flexible, modular payment design [OK]
      Hint: Use composition to add features without changing base classes [OK]
      Common Mistakes:
      • Assuming inheritance is always simpler for new features
      • Believing composition duplicates code unnecessarily
      • Confusing runtime flexibility between inheritance and composition
      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