Bird
Raised Fist0
Javaprogramming~20 mins

Runtime polymorphism in Java - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
πŸŽ–οΈ
Runtime Polymorphism Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of overridden method call

What is the output of this Java program demonstrating runtime polymorphism?

Java
class Animal {
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("Dog barks");
    }
}

public class Test {
    public static void main(String[] args) {
        Animal a = new Dog();
        a.sound();
    }
}
ADog barks
BAnimal makes a sound
CCompilation error
DRuntime error
Attempts:
2 left
πŸ’‘ Hint

Remember that the method called depends on the actual object type, not the reference type.

❓ Predict Output
intermediate
2:00remaining
Output with multiple overridden methods

What will be printed when this Java code runs?

Java
class Vehicle {
    void start() {
        System.out.println("Vehicle starts");
    }
}

class Car extends Vehicle {
    @Override
    void start() {
        System.out.println("Car starts");
    }
}

class SportsCar extends Car {
    @Override
    void start() {
        System.out.println("SportsCar starts quickly");
    }
}

public class Test {
    public static void main(String[] args) {
        Vehicle v = new SportsCar();
        v.start();
    }
}
AVehicle starts
BCar starts
CCompilation error
DSportsCar starts quickly
Attempts:
2 left
πŸ’‘ Hint

Which class's start() method is called depends on the actual object type.

❓ Predict Output
advanced
2:00remaining
Output with casting and overridden methods

What is the output of this Java program?

Java
class Parent {
    void show() {
        System.out.println("Parent show");
    }
}

class Child extends Parent {
    @Override
    void show() {
        System.out.println("Child show");
    }
    void childOnly() {
        System.out.println("Child only method");
    }
}

public class Test {
    public static void main(String[] args) {
        Parent p = new Child();
        p.show();
        ((Child) p).childOnly();
    }
}
A
Child show
Compilation error
BRuntime error
C
Child show
Child only method
D
Parent show
Child only method
Attempts:
2 left
πŸ’‘ Hint

Check which method is overridden and which method is only in the child class.

❓ Predict Output
advanced
2:00remaining
Output with overridden method and variable hiding

What will this Java program print?

Java
class Base {
    String name = "Base";
    void printName() {
        System.out.println(name);
    }
}

class Derived extends Base {
    String name = "Derived";
    @Override
    void printName() {
        System.out.println(name);
    }
}

public class Test {
    public static void main(String[] args) {
        Base b = new Derived();
        System.out.println(b.name);
        b.printName();
    }
}
A
Derived
Derived
B
Base
Derived
C
Base
Base
D
Derived
Base
Attempts:
2 left
πŸ’‘ Hint

Remember that variables are not polymorphic, but methods are.

❓ Predict Output
expert
3:00remaining
Output with abstract class and runtime polymorphism

What is the output of this Java program using an abstract class and runtime polymorphism?

Java
abstract class Shape {
    abstract void draw();
}

class Circle extends Shape {
    @Override
    void draw() {
        System.out.println("Drawing Circle");
    }
}

class Square extends Shape {
    @Override
    void draw() {
        System.out.println("Drawing Square");
    }
}

public class Test {
    public static void main(String[] args) {
        Shape s = new Circle();
        s.draw();
        s = new Square();
        s.draw();
    }
}
A
Drawing Circle
Drawing Square
B
Drawing Square
Drawing Circle
CRuntime error
DCompilation error: cannot instantiate abstract class
Attempts:
2 left
πŸ’‘ Hint

Abstract classes cannot be instantiated directly, but references can point to subclass objects.

Practice

(1/5)
1. What is runtime polymorphism in Java?
easy
A. Creating multiple objects of the same class
B. Using multiple classes with the same name
C. Choosing which method to call during program execution based on object type
D. Writing methods with different names in the same class

Solution

  1. Step 1: Understand polymorphism concept

    Polymorphism means many forms; in Java, it allows methods to behave differently based on object type.
  2. Step 2: Identify runtime polymorphism

    Runtime polymorphism happens when the program decides which overridden method to call during execution, not before.
  3. Final Answer:

    Choosing which method to call during program execution based on object type -> Option C
  4. Quick Check:

    Runtime polymorphism = method choice at runtime [OK]
Hint: Runtime polymorphism means method choice happens while running [OK]
Common Mistakes:
  • Confusing compile-time and runtime polymorphism
  • Thinking it means multiple classes with same name
  • Believing it is about method overloading
2. Which syntax correctly shows method overriding for runtime polymorphism in Java?
easy
A. class Parent { void show() {} } class Child extends Parent { void show() {} }
B. class Parent { void show() {} } class Child extends Parent { void display() {} }
C. class Parent { void show() {} } class Child { void show() {} }
D. class Parent { void show() {} } class Child extends Parent { void show(int x) {} }

Solution

  1. Step 1: Check method overriding rules

    Method overriding requires same method name and parameters in subclass extending superclass.
  2. Step 2: Match options with overriding

    class Parent { void show() {} } class Child extends Parent { void show() {} } shows subclass overriding show() method correctly; others differ in method name or parameters.
  3. Final Answer:

    class Parent { void show() {} } class Child extends Parent { void show() {} } -> Option A
  4. Quick Check:

    Same method name and parameters in subclass = overriding [OK]
Hint: Overriding needs same method name and parameters in subclass [OK]
Common Mistakes:
  • Changing method name in subclass instead of overriding
  • Changing method parameters (overloading, not overriding)
  • Not extending the parent class
3. What is the output of this code?
class Animal {
  void sound() { System.out.println("Animal sound"); }
}
class Dog extends Animal {
  void sound() { System.out.println("Bark"); }
}
public class Test {
  public static void main(String[] args) {
    Animal a = new Dog();
    a.sound();
  }
}
medium
A. Bark
B. Animal sound
C. Compilation error
D. Runtime error

Solution

  1. Step 1: Understand object and reference types

    Reference is of type Animal, but object is Dog, so overridden method in Dog is called.
  2. Step 2: Identify method called at runtime

    Due to runtime polymorphism, sound() of Dog runs, printing "Bark".
  3. Final Answer:

    Bark -> Option A
  4. Quick Check:

    Overridden method runs based on object type [OK]
Hint: Method called depends on object type, not reference type [OK]
Common Mistakes:
  • Thinking reference type decides method called
  • Expecting superclass method output
  • Confusing compile-time and runtime behavior
4. Find the error in this code related to runtime polymorphism:
class Parent {
  void show() { System.out.println("Parent"); }
}
class Child extends Parent {
  void show(int x) { System.out.println("Child " + x); }
}
public class Test {
  public static void main(String[] args) {
    Parent p = new Child();
    p.show();
  }
}
medium
A. Parent class method show() is private
B. Child class does not override show() method correctly
C. Cannot assign Child object to Parent reference
D. Missing main method

Solution

  1. Step 1: Check method overriding in Child class

    Child defines show(int x), which is overloading, not overriding show().
  2. Step 2: Understand method call on Parent reference

    Parent reference calls show() with no arguments, but Child has no overriding method, so Parent's method runs.
  3. Final Answer:

    Child class does not override show() method correctly -> Option B
  4. Quick Check:

    Overriding needs exact method signature match [OK]
Hint: Overriding needs same method signature, not just same name [OK]
Common Mistakes:
  • Thinking overloading is overriding
  • Expecting Child's show(int) to override show()
  • Ignoring method parameters in overriding
5. Given these classes:
class Vehicle {
  void start() { System.out.println("Vehicle starts"); }
}
class Car extends Vehicle {
  void start() { System.out.println("Car starts"); }
}
class Bike extends Vehicle {
  void start() { System.out.println("Bike starts"); }
}
public class Test {
  public static void main(String[] args) {
    Vehicle[] vehicles = {new Car(), new Bike(), new Vehicle()};
    for (Vehicle v : vehicles) {
      v.start();
    }
  }
}

What is the output when this program runs?
hard
A. Vehicle starts Vehicle starts Vehicle starts
B. Compilation error due to array initialization
C. Car starts Vehicle starts Bike starts
D. Car starts Bike starts Vehicle starts

Solution

  1. Step 1: Analyze array elements and their types

    Array holds objects: Car, Bike, Vehicle, all as Vehicle references.
  2. Step 2: Understand method calls in loop

    Each start() call runs overridden method of actual object type due to runtime polymorphism.
  3. Step 3: Determine output lines

    Car prints "Car starts", Bike prints "Bike starts", Vehicle prints "Vehicle starts" in order.
  4. Final Answer:

    Car starts Bike starts Vehicle starts -> Option D
  5. Quick Check:

    Overridden methods run per object type in array [OK]
Hint: Loop calls overridden methods based on actual object type [OK]
Common Mistakes:
  • Expecting all calls to run Vehicle's method
  • Confusing array reference type with object type
  • Thinking array initialization causes error