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
Recall & Review
beginner
What is runtime polymorphism in Java?
Runtime polymorphism is when a call to an overridden method is resolved at runtime, allowing a subclass to provide a specific implementation that is used instead of the superclass method.
Click to reveal answer
beginner
How does Java achieve runtime polymorphism?
Java uses method overriding and dynamic method dispatch to achieve runtime polymorphism. The JVM decides at runtime which method to call based on the object's actual type.
Click to reveal answer
beginner
What is method overriding?
Method overriding happens when a subclass provides its own version of a method already defined in its superclass with the same signature.
Click to reveal answer
intermediate
Why can't runtime polymorphism happen with static methods?
Static methods belong to the class, not instances, so they are resolved at compile time, not runtime. Therefore, they cannot be overridden or used for runtime polymorphism.
Click to reveal answer
intermediate
Explain dynamic method dispatch with a simple example.
Dynamic method dispatch means the JVM calls the overridden method of the actual object type, not the reference type. For example, if a superclass reference points to a subclass object, the subclass method runs at runtime.
Click to reveal answer
Which feature allows Java to decide which overridden method to call at runtime?
ADynamic method dispatch
BMethod overloading
CStatic binding
DConstructor chaining
✗ Incorrect
Dynamic method dispatch is the process Java uses to call the correct overridden method at runtime.
What must be true for runtime polymorphism to occur?
AMethod must be static
BMethod must be final
CMethod must be private
DMethod must be overridden in subclass
✗ Incorrect
Only overridden methods can be resolved at runtime for polymorphism.
Can runtime polymorphism happen with constructors?
AOnly with abstract constructors
BYes, always
CNo, constructors are not inherited
DOnly if constructors are static
✗ Incorrect
Constructors are not inherited and cannot be overridden, so runtime polymorphism does not apply.
What keyword is used to override a method in Java?
A@Override
Boverride
Csuper
Dextends
✗ Incorrect
The @Override annotation helps indicate a method is overriding a superclass method.
Which of these is NOT a benefit of runtime polymorphism?
ACode flexibility
BImproved performance by compile-time binding
CEasier code maintenance
DAbility to use superclass references for subclass objects
✗ Incorrect
Runtime polymorphism uses runtime binding, which can be slower than compile-time binding.
Describe runtime polymorphism and how Java uses it with method overriding.
Think about how Java decides which method to run when a superclass reference points to a subclass object.
You got /4 concepts.
Explain why static methods cannot participate in runtime polymorphism.
Consider when static methods are linked compared to instance methods.
You got /4 concepts.
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
Step 1: Understand polymorphism concept
Polymorphism means many forms; in Java, it allows methods to behave differently based on object type.
Step 2: Identify runtime polymorphism
Runtime polymorphism happens when the program decides which overridden method to call during execution, not before.
Final Answer:
Choosing which method to call during program execution based on object type -> Option C
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
Step 1: Check method overriding rules
Method overriding requires same method name and parameters in subclass extending superclass.
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.
Final Answer:
class Parent { void show() {} } class Child extends Parent { void show() {} } -> Option A
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
Step 1: Understand object and reference types
Reference is of type Animal, but object is Dog, so overridden method in Dog is called.
Step 2: Identify method called at runtime
Due to runtime polymorphism, sound() of Dog runs, printing "Bark".
Final Answer:
Bark -> Option A
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
Step 1: Check method overriding in Child class
Child defines show(int x), which is overloading, not overriding show().
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.
Final Answer:
Child class does not override show() method correctly -> Option B
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
Step 1: Analyze array elements and their types
Array holds objects: Car, Bike, Vehicle, all as Vehicle references.
Step 2: Understand method calls in loop
Each start() call runs overridden method of actual object type due to runtime polymorphism.
Step 3: Determine output lines
Car prints "Car starts", Bike prints "Bike starts", Vehicle prints "Vehicle starts" in order.
Final Answer:
Car starts
Bike starts
Vehicle starts -> Option D
Quick Check:
Overridden methods run per object type in array [OK]
Hint: Loop calls overridden methods based on actual object type [OK]