In Java, it is mainly divided into two types:
- Compile time Polymorphism
- Runtime Polymorphism
Compile time polymorphism:
It is also known as static polymorphism. This type of polymorphism is achieved by function overloading or operator overloading. Function overloading : When there are multiple functions with the same name but different parameters, then these functions are said to be overloaded. Functions can be overloaded by the change in the number of arguments or/and changes in the type of arguments.1. By using different types of arguments
// A simple java program for Method overloading
class Overload
{
// Method with integer parameters
static int Add(int a, int b)
{
return a + b;
}
// Method with the same name but double parameters
static double Add(double a, double b)
{
return a + b;
}
}
class Test {
public static void main(String[] args)
{
System.out.println(Overload.Add(2, 4));
System.out.println(Overload.Add(5.5, 6.3));
}
}
Output:
6
11.8
2. By using different numbers of arguments
// Java program for Method overloading
class Overload {
// Method with 2 parameters
static int Add(int a, int b)
{
return a + b;
}
// Method with the same name but 3 parameters
static int Add(int a, int b, int c)
{
return a + b + c;
}
}
class Test {
public static void main(String[] args)
{
System.out.println(Overload.Add(2, 4));
System.out.println(Overload.Add(2, 7, 3));
}
}
Output:
6
12
Runtime polymorphism: It is also known as Dynamic Method Dispatch. It is a process in which a function call to the overridden method is resolved at Runtime. This type of polymorphism is achieved by Method Overriding.
Method overriding, on the other hand, occurs when a derived class has a definition for one of the member functions of the base class. That base function is said to be overridden.
Example:
//A simple java program for Method overridding
class ParentClass {
void Display()
{
System.out.println("I am the parent");
}
}
class SubClass1 extends ParentClass {
void Display()
{
System.out.println("I am the child1");
}
}
class SubClass2 extends ParentClass {
void Display()
{
System.out.println("I am the child2");
}
}
class Poly {
public static void main(String[] args)
{
ParentClass a;
a = new SubClass1();
a.Display();
a = new SubClass2();
a.Display();
}
}
Output:
I am the child1
I am the child2