Polymorphism
Polymorphism is what makes inheritance powerful. Polymorphism allows the suprclass reference object to call methods on the subclass methods.
Let's see an example to illustrate Animal.java
public class Animal {
void makeSound(){
System.out.println("Animal making a sound");
}
}
Cat.java
public class Cat extends Animal {
@Override
void makeSound() {
System.out.println("Meow");
}
}
Horse.java
public class Horse extends Animal{
@Override
void makeSound() {
System.out.println("Neigh");
}
}
Dog.cat
public class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Bark");
}
}
The three animals Dog, Cat and Horse all extends the Animal class and have all overriden the makeSound method
Let's see the power of polymorphism by using an animal reference to call the subclass makeSound method.
Main.java
public class Main {
public static void main(String[] args) {
Animal[] animals = { new Horse(), new Cat(), new Dog(), new Animal() };
for (Animal animal: animals) {
animal.makeSound();
}
}
}
Output :
Neigh
Meow
Bark
Animal making a sound
We declared an array of type Animal and stored Animal descendants but we were able to call the specific makeSound method on the Animal class.
Since a Dog, Horse and Cat are Animals, we can use store them in the Animal reference. When the call is made, the appropriate method to be called is determined at runtime. This is also called dynamic method dispatch or virtual method invocation.