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
Why polymorphism matters
📖 Scenario: Imagine you are building a simple program to manage different types of animals in a zoo. Each animal can make a sound, but the sound is different for each animal. You want to write code that can handle any animal without knowing exactly which type it is.
🎯 Goal: Build a small C# program that shows how polymorphism lets you treat different animal types the same way while they behave differently.
📋 What You'll Learn
Create a base class called Animal with a method MakeSound().
Create two classes Dog and Cat that inherit from Animal and override MakeSound().
Create a list of Animal objects containing both Dog and Cat instances.
Use a loop to call MakeSound() on each animal and print the result.
💡 Why This Matters
🌍 Real World
Polymorphism is used in many programs where different objects share common behavior but implement it differently, like different types of animals, vehicles, or user interface elements.
💼 Career
Understanding polymorphism is essential for software developers to write clean, reusable, and extendable code, which is a key skill in professional programming jobs.
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 public virtual string MakeSound() inside the Animal class.
2
Create Dog and Cat classes inheriting Animal
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 public override string MakeSound() in both Dog and Cat classes.
3
Create a list of animals
Create a List<Animal> called animals and add one Dog and one Cat object to it.
C Sharp (C#)
Hint
Use List<Animal> and add new Dog() and new Cat() to it.
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 foreach (Animal animal in animals) and inside the loop Console.WriteLine(animal.MakeSound()).
Practice
(1/5)
1. What is the main benefit of polymorphism in C# programming?
easy
A. It forces all classes to have the same properties.
B. It makes the program run faster by using less memory.
C. It prevents any changes to the code once compiled.
D. It allows one method to work with different types of objects.
Solution
Step 1: Understand polymorphism concept
Polymorphism means one method name can work with different object types.
Step 2: Identify the main benefit
This makes code easier to write and maintain by reusing method names for different classes.
Final Answer:
It allows one method to work with different types of objects. -> Option D
Quick Check:
Polymorphism = One method, many types [OK]
Hint: Polymorphism means one method, many object types [OK]
Common Mistakes:
Thinking polymorphism speeds up code automatically
Confusing polymorphism with code immutability
Believing polymorphism forces identical class properties
2. Which of the following is the correct way to declare a method that demonstrates polymorphism in C#?
easy
A. public void Draw() { }
B. public void Draw(int x) { }
C. public virtual void Draw() { }
D. public static void Draw() { }
Solution
Step 1: Identify polymorphic method declaration
In C#, polymorphism is often shown using virtual methods that can be overridden.
Step 2: Check method options
Only 'public virtual void Draw()' allows derived classes to override and show polymorphism.
Final Answer:
public virtual void Draw() { } -> Option C
Quick Check:
Virtual method enables polymorphism [OK]
Hint: Use 'virtual' keyword to enable polymorphism [OK]
Common Mistakes:
Choosing static methods which cannot be overridden
Ignoring the virtual keyword for polymorphism
Confusing method overloading with polymorphism
3. Consider the following C# code:
class Animal { public virtual string Speak() => "..."; } class Dog : Animal { public override string Speak() => "Woof"; } class Cat : Animal { public override string Speak() => "Meow"; }
Animal a = new Dog(); Console.WriteLine(a.Speak());
What is the output?
medium
A. Woof
B. ...
C. Meow
D. Compilation error
Solution
Step 1: Understand polymorphism with virtual and override
The variable 'a' is of type Animal but holds a Dog object. The Speak method is virtual and overridden in Dog.
Step 2: Determine which Speak method runs
At runtime, the Dog's Speak method runs, returning "Woof".
Final Answer:
Woof -> Option A
Quick Check:
Virtual method calls overridden version [OK]
Hint: Virtual method calls override in actual object type [OK]
Common Mistakes:
Expecting base class method output
Confusing variable type with object type
Thinking code causes compile error
4. What is wrong with this C# code snippet that tries to use polymorphism?
class Shape { public void Draw() { Console.WriteLine("Shape"); } } class Circle : Shape { public void Draw() { Console.WriteLine("Circle"); } }
Shape s = new Circle(); s.Draw();
medium
A. Shape cannot be assigned a Circle object.
B. Draw method in Shape should be virtual to enable polymorphism.
C. Circle class must not have a Draw method.
D. Draw method must be static.
Solution
Step 1: Check method declarations for polymorphism
Polymorphism requires the base method to be marked 'virtual' and the derived method to 'override'.
Step 2: Identify missing virtual keyword
Here, Shape's Draw is not virtual, so Circle's Draw hides it but does not override.
Final Answer:
Draw method in Shape should be virtual to enable polymorphism. -> Option B
Quick Check:
Base method must be virtual for polymorphism [OK]
Hint: Base method needs 'virtual' for polymorphism [OK]
Common Mistakes:
Thinking method hiding equals polymorphism
Believing derived method must be removed
Assuming static methods support polymorphism
5. You have a list of different shapes (Circle, Square, Triangle) all inheriting from Shape with a virtual method Draw(). How does polymorphism help you when you want to draw all shapes without checking their types?
hard
A. You can call Draw() on each Shape reference and the correct shape's Draw runs automatically.
B. You must check each shape's type and call its specific Draw method manually.
C. You need to cast each shape to its exact type before calling Draw().
D. You cannot use polymorphism with collections of different shapes.
Solution
Step 1: Understand polymorphism with collections
Polymorphism allows calling the same method on base class references that point to different derived objects.
Step 2: Apply to drawing shapes
Calling Draw() on each Shape in the list runs the correct overridden Draw method for each shape automatically.
Final Answer:
You can call Draw() on each Shape reference and the correct shape's Draw runs automatically. -> Option A
Quick Check:
Polymorphism enables method calls without type checks [OK]
Hint: Call base method; derived version runs automatically [OK]
Common Mistakes:
Thinking you must check types before calling methods