Understanding Polymorphism in Dart
Polymorphism is one of the key concepts in object-oriented programming. It means “many forms” and allows methods or classes to behave differently based on the object calling them. In Dart, polymorphism is achieved using inheritance and method overriding.
Key Points of Polymorphism
- A parent class reference can hold the object of its child class.
- The method implementation executed depends on the runtime object type.
Example of Polymorphism in Dart
// Base class
class Animal {
void sound() {
print("Animals make sound");
}
}
// Derived class 1
class Dog extends Animal {
@override
void sound() {
print("Dog barks");
}
}
// Derived class 2
class Cat extends Animal {
@override
void sound() {
print("Cat meows");
}
}
void main() {
// Polymorphic behavior
Animal animal; // Base class reference
// Assigning Dog object to Animal reference
animal = Dog();
animal.sound(); // Output: Dog barks
// Assigning Cat object to Animal reference
animal = Cat();
animal.sound(); // Output: Cat meows
}
Real-World Scenario: Polymorphism Example
Imagine you are creating a system for a zoo, where different animals make different sounds, but all are treated as “Animal.”
abstract class Animal {
void sound();
}
class Lion extends Animal {
@override
void sound() {
print("Lion roars");
}
}
class Elephant extends Animal {
@override
void sound() {
print("Elephant trumpets");
}
}
class Monkey extends Animal {
@override
void sound() {
print("Monkey chatters");
}
}
void main() {
// List of animals
List<Animal> animals = [Lion(), Elephant(), Monkey()];
// Polymorphic behavior in action
for (var animal in animals) {
animal.sound();
}
// Output:
// Lion roars
// Elephant trumpets
// Monkey chatters
}
Benefits of Polymorphism
- Flexibility: Code works with multiple object types in a unified way.
- Extensibility: New classes can be added with minimal changes to existing code.
- Reusability: You can reuse existing methods to work with different object types.
