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
Runtime Polymorphism Execution
📖 Scenario: Imagine you are creating a simple program to show how different animals make sounds. Each animal has its own way of making a sound, but you want to use the same method name to call their sounds. This is called runtime polymorphism.
🎯 Goal: You will build a program with a base class Animal and two derived classes Dog and Cat. Each derived class will have its own version of the MakeSound method. You will then create a list of animals and call MakeSound on each one to see the different sounds.
📋 What You'll Learn
Create a base class called Animal with a virtual method MakeSound.
Create two derived classes called Dog and Cat that override MakeSound.
Create a list of Animal objects containing both Dog and Cat instances.
Use a foreach loop to call MakeSound on each animal and print the result.
💡 Why This Matters
🌍 Real World
Runtime polymorphism is used in many programs to handle different objects with a common interface, like different shapes in a drawing app or different payment methods in a shopping app.
💼 Career
Understanding runtime polymorphism is essential for object-oriented programming jobs, as it helps write flexible and reusable code.
Progress0 / 4 steps
1
Create the base class Animal
Create a public class called Animal with a public virtual method MakeSound that returns a string "Some sound".
C Sharp (C#)
Hint
Use the virtual keyword to allow derived classes to override the MakeSound method.
2
Create derived classes Dog and Cat
Create two public classes called Dog and Cat that inherit from Animal. Override the MakeSound method in Dog to return "Bark" and in Cat to return "Meow".
C Sharp (C#)
Hint
Use the override keyword to provide a new version of MakeSound in each derived class.
3
Create a list of animals
Create a List<Animal> called animals and add one Dog object and one Cat object to it.
C Sharp (C#)
Hint
Remember to include using System.Collections.Generic; at the top for the list.
4
Call MakeSound on each animal and print
Use a foreach loop with variable animal to go through animals and print the result of animal.MakeSound().
C Sharp (C#)
Hint
Use Console.WriteLine(animal.MakeSound()) inside the foreach loop.
Practice
(1/5)
1. What does runtime polymorphism in C# allow you to do?
easy
A. Create multiple instances of the same class
B. Change variable types at runtime
C. Call derived class methods through a base class reference
D. Use static methods without creating objects
Solution
Step 1: Understand runtime polymorphism concept
Runtime polymorphism allows a base class reference to call methods overridden in derived classes.
Step 2: Identify correct behavior
This means the actual method called depends on the object's real type, not the reference type.
Final Answer:
Call derived class methods through a base class reference -> Option C
Quick Check:
Runtime polymorphism = base ref calls derived method [OK]
Hint: Think: base class ref calls derived method at runtime [OK]
Common Mistakes:
Confusing polymorphism with changing variable types
Thinking static methods are polymorphic
Believing polymorphism creates multiple instances
2. Which keyword is used in C# to allow a method to be overridden in a derived class?
easy
A. virtual
B. override
C. new
D. abstract
Solution
Step 1: Identify keyword to enable overriding
The base class method must be marked with virtual to allow overriding.
Step 2: Understand roles of keywords
override is used in derived classes, virtual in base classes.
Final Answer:
virtual -> Option A
Quick Check:
Base method uses virtual to allow override [OK]
Hint: Base method uses virtual; derived uses override [OK]
Common Mistakes:
Using override in base class instead of virtual
Confusing new keyword with override
Thinking abstract is required for all overrides
3. What is the output of this C# code?
class Animal {
public virtual string Speak() => "Animal sound";
}
class Dog : Animal {
public override string Speak() => "Bark";
}
class Cat : Animal {
public override string Speak() => "Meow";
}
Animal a = new Dog();
Console.WriteLine(a.Speak());
medium
A. Animal sound
B. Bark
C. Meow
D. Compile error
Solution
Step 1: Identify object type and method called
Variable a is of type Animal but references a Dog object.
Step 2: Apply runtime polymorphism
Since Speak is virtual and overridden in Dog, the Dog version runs, printing "Bark".
Final Answer:
Bark -> Option B
Quick Check:
Base ref calls Dog's Speak() = Bark [OK]
Hint: Base ref calls derived override method at runtime [OK]
Common Mistakes:
Expecting base class method output
Confusing object type with reference type
Thinking compile error due to override
4. Identify the error in this C# code related to runtime polymorphism:
class Base {
public override void Show() {
Console.WriteLine("Base Show");
}
}
class Derived : Base {
public override void Show() {
Console.WriteLine("Derived Show");
}
}
medium
A. Base class method must be virtual, not override
B. Derived class method cannot override base method
C. Missing semicolon after method declaration
D. No error, code is correct
Solution
Step 1: Check base class method declaration
Base class method incorrectly uses override instead of virtual.
Step 2: Understand override rules
Only derived classes use override; base class must use virtual to allow overriding.
Final Answer:
Base class method must be virtual, not override -> Option A
Quick Check:
Base method needs virtual keyword [OK]
Hint: Base method uses virtual, not override [OK]
Common Mistakes:
Using override in base class method
Thinking override is allowed without virtual
Ignoring method signature correctness
5. Given these classes:
class Vehicle {
public virtual string Describe() => "Vehicle";
}
class Car : Vehicle {
public override string Describe() => "Car";
}
class SportsCar : Car {
public override string Describe() => "SportsCar";
}
Vehicle v = new SportsCar();
Car c = new SportsCar();
SportsCar s = new SportsCar();
Console.WriteLine(v.Describe());
Console.WriteLine(c.Describe());
Console.WriteLine(s.Describe());
What is the output?
hard
A. Vehicle\nCar\nSportsCar
B. Car\nCar\nCar
C. Vehicle\nVehicle\nVehicle
D. SportsCar\nSportsCar\nSportsCar
Solution
Step 1: Identify actual object type for all references
All variables v, c, and s reference a SportsCar object.
Step 2: Apply runtime polymorphism for Describe()
Since Describe is overridden in SportsCar, all calls print "SportsCar" regardless of reference type.
Final Answer:
SportsCar\nSportsCar\nSportsCar -> Option D
Quick Check:
All calls use SportsCar override [OK]
Hint: Actual object type decides method, not reference type [OK]
Common Mistakes:
Assuming base class method runs for base type variable