Sunday, May 17, 2026
HomeArtificial IntelligenceInformation to Polymorphism in Java with Examples

Information to Polymorphism in Java with Examples

[ad_1]

Polymorphism in Java

Polymorphism in Java is the power of an object to take many types. To place it merely, polymorphism in Java permits us to carry out the identical motion in many various methods. Any Java object that may cross multiple IS-A check is polymorphic in Java. Due to this fact, all of the Java objects are polymorphic because it has handed the IS-A check for their very own sort and for the category Object. There are two sorts of polymorphism in Java: compile-time polymorphism and runtime polymorphism.

This text additionally talks about two sorts of polymorphism in Java: compile-time polymorphism and runtime polymorphism, Java polymorphism examples, methodology overloading, methodology overriding, why to make use of polymorphism in Java, and lots of extra.

Polymorphism is a characteristic of the object-oriented programming language, Java, which suggests which you could carry out a single activity in several methods. Within the technical world, polymorphism in Java permits one to do a number of implementations by defining one interface. 

  1. What’s Polymorphism?
  2. What’s Polymorphism in Java?
  3. Actual-Life Examples of Polymorphism
  4. Varieties of Polymorphism
  5. Technique Overloading in Java
  6. Technique Overriding in Java
  7. Runtime Polymorphism in Java
  8. Compile-Time Polymorphism in Java
  9. Polymorphism in programming
  10. Polymorphism variables
  11. Why use Polymorphism in Java?
  12. Traits of Polymorphism
  13. Issues with Polymorphism
  14. Conclusion

Our Most In style Free Programs:


What’s Polymorphism?

The derivation of the phrase Polymorphism is from two completely different Greek words- poly and morphs. “Poly” means quite a few, and “Morphs” means types. So, polymorphism means innumerable types. Polymorphism, due to this fact, is without doubt one of the most important options of Object-Oriented Programming.

What’s Polymorphism in Java?

Polymorphism in Java is the duty that performs a single motion in several methods.

So, languages that don’t help polymorphism aren’t ‘Object-Oriented Languages’, however, ‘Object-Based mostly Languages’. Ada, as an illustration, is one such language. Since Java helps polymorphism, it’s an Object-Oriented Language.

Polymorphism happens when there may be inheritance, i.e. there are lots of courses which can be associated to one another.

Inheritance is a robust characteristic in Java. Inheritance lets one class purchase the properties and attributes of one other class. Polymorphism in Java permits us to make use of these inherited properties to carry out completely different duties. Thus, permitting us to realize the identical motion in many various methods.

Actual-Life Examples of Polymorphism

A person can have completely different relationships with completely different individuals. A girl generally is a mom, a daughter, a sister, a pal, all on the identical time, i.e. she performs different behaviors in several conditions.

The human physique has completely different organs. Each organ has a distinct perform to carry out; the guts is liable for blood circulate, lungs for respiration, mind for cognitive exercise, and kidneys for excretion. So now we have a regular methodology perform that performs in a different way relying upon the organ of the physique. 

Polymorphism in Java Instance

A superclass named “Shapes” has a way “space()”. Subclasses of “Shapes” might be “Triangle”, “circle”, “Rectangle”, and so on. Every subclass has its approach of calculating space. Utilizing Inheritance and Polymorphism, the subclasses can use the “space()” methodology to seek out the realm’s formulation for that form.

class Shapes {
  public void space() {
    System.out.println("The formulation for space of ");
  }
}
class Triangle extends Shapes {
  public void space() {
    System.out.println("Triangle is ½ * base * peak ");
  }
}
class Circle extends Shapes {
  public void space() {
    System.out.println("Circle is 3.14 * radius * radius ");
  }
}
class Foremost {
  public static void principal(String[] args) {
    Shapes myShape = new Shapes();  // Create a Shapes object
    Shapes myTriangle = new Triangle();  // Create a Triangle object
    Shapes myCircle = new Circle();  // Create a Circle object
    myShape.space();
    myTriangle.space();
    myShape.space();
    myCircle.space();
  }
}

Output:

The formulation for the realm of Triangle is ½ * base * peak
The formulation for the realm of the Circle is 3.14 * radius * radius

Additionally Learn: OOPs ideas in Java

Varieties of Polymorphism

You may carry out Polymorphism in Java through two completely different strategies:

  1. Technique Overloading
  2. Technique Overriding

What’s Technique Overloading in Java?

Technique overloading is the method that may create a number of strategies of the identical title in the identical class, and all of the strategies work in several methods. Technique overloading happens when there may be multiple methodology of the identical title within the class.

Instance of Technique Overloading in Java

class Shapes {
  public void space() {
    System.out.println("Discover space ");
  }
public void space(int r) {
    System.out.println("Circle space = "+3.14*r*r);
  }

public void space(double b, double h) {
    System.out.println("Triangle space="+0.5*b*h);
  }
public void space(int l, int b) {
    System.out.println("Rectangle space="+l*b);
  }


}

class Foremost {
  public static void principal(String[] args) {
    Shapes myShape = new Shapes();  // Create a Shapes object
    
    myShape.space();
    myShape.space(5);
    myShape.space(6.0,1.2);
    myShape.space(6,2);
    
  }
}

Output:

Discover space
Circle space = 78.5
Triangle space=3.60
Rectangle space=12

What’s Technique Overriding in Java?

Technique overriding is the method when the subclass or a toddler class has the identical methodology as declared within the dad or mum class.

Instance of Technique Overriding in Java

class Automobile{  
  //defining a way  
  void run(){System.out.println("Automobile is shifting");}  
}  
//Creating a toddler class  
class Car2 extends Automobile{  
  //defining the identical methodology as within the dad or mum class  
  void run(){System.out.println("automobile is operating safely");}  
  
  public static void principal(String args[]){  
  Car2 obj = new Car2();//creating object  
  obj.run();//calling methodology  
  }  
}  

Output:

Automotive is operating safely

Additionally, Polymorphism in Java might be categorized into two sorts, i.e:

  1. Static/Compile-Time Polymorphism
  2. Dynamic/Runtime Polymorphism

What’s Compile-Time Polymorphism in Java?

Compile-Time Polymorphism in Java is often known as Static Polymorphism. Moreover, the decision to the tactic is resolved at compile-time. Compile-Time polymorphism is achieved via Technique Overloading. The sort of polymorphism will also be achieved via Operator Overloading. Nevertheless, Java doesn’t help Operator Overloading.

Technique Overloading is when a category has a number of strategies with the identical title, however the quantity, sorts, and order of parameters and the return sort of the strategies are completely different. Java permits the consumer freedom to make use of the identical title for varied capabilities so long as it could distinguish between them by the sort and variety of parameters. 

Instance of Compile- Time Polymorphism in Java

We are going to do addition in Java and perceive the idea of compile-time polymorphism utilizing subtract() 

package deal staticPolymorphism; 
public class Addition 
{ 
void sum(int a, int b) 
{ 
int c = a+b; 
System.out.println(“ Addition of two numbers :” +c); } 
void sum(int a, int b, int e) 
{ 
int c = a+b+e; 
System.out.println(“ Addition of three numbers :” +c); } 
public static void principal(String[] args) 
{ 
Addition obj = new Addition(); 
obj.sum ( 30,90); 
obj.sum(45, 80, 22); 
} 
}

The output of this system can be: 

Sum of two numbers: 120 

Sum of three numbers: 147 

On this program, the sum() methodology overloads with two sorts through completely different parameters. 

That is the essential idea of compile-time polymorphism in java the place we are able to carry out varied operations through the use of a number of strategies having the identical title.

Our Most In style Free Programs:


What’s Runtime Polymorphism in Java?

Runtime polymorphism in Java can also be popularly often called Dynamic Binding or Dynamic Technique Dispatch. On this course of, the decision to an overridden methodology is resolved dynamically at runtime quite than at compile-time. You may obtain Runtime polymorphism through Technique Overriding.

Technique Overriding is finished when a toddler or a subclass has a way with the identical title, parameters, and return sort because the dad or mum or the superclass; then that perform overrides the perform within the superclass. In easier phrases, if the subclass offers its definition to a way already current within the superclass; then that perform within the base class is claimed to be overridden.

Additionally, it ought to be famous that runtime polymorphism can solely be achieved via capabilities and never information members. 

Overriding is finished through the use of a reference variable of the superclass. The tactic to be referred to as is decided based mostly on the article which is being referred to by the reference variable. That is often known as Upcasting.

Upcasting takes place when the Guardian class’s reference variable refers back to the object of the kid class. For instance:

class A{} 
class B extends A{}  
A a=new B(); //upcasting

Examples of Runtime Polymorphism in Java

Instance 1:

On this instance, we’re creating one superclass Animal and three subclasses, Herbivores, Carnivores, and Omnivores. Subclasses lengthen the superclass and override its eat() methodology. We are going to name the eat() methodology by the reference variable of Guardian class, i.e. Animal class. Because it refers back to the base class object and the bottom class methodology overrides the superclass methodology; the bottom class methodology is invoked at runtime. As Java Digital Machine or the JVM and never the compiler determines methodology invocation, it’s, due to this fact, runtime polymorphism.

class Animal{  
  void eat(){
System.out.println("Animals Eat");
}  
}  
class herbivores extends Animal{  
  void eat(){
System.out.println("Herbivores Eat Vegetation");
} 
  }
class omnivores extends Animal{  
  void eat(){
System.out.println("Omnivores Eat Vegetation and meat");
} 
  }
class carnivores extends Animal{  
  void eat(){
System.out.println("Carnivores Eat meat");
} 
  }
class principal{
  public static void principal(String args[]){ 
    Animal A = new Animal();
    Animal h = new herbivores(); //upcasting  
	Animal o = new omnivores(); //upcasting  
    Animal c = new carnivores(); //upcasting  
    A.eat();
    h.eat();
    o.eat();  
    c.eat();  
  
  }  
}  

Output:

Animals eat
Herbivores Eat Vegetation
Omnivores Eat Vegetation and meat
Carnivores eat meat

Instance 2:

On this instance, we’re creating one superclass Hillstations and three subclasses Manali, Mussoorie, Gulmarg. Subclasses lengthen the superclass and override its location() and famousfor() methodology. We are going to name the situation() and famousfor() methodology by the Guardian class’, i.e. Hillstations class. Because it refers back to the base class object and the bottom class methodology overrides the superclass methodology; the bottom class methodology is invoked at runtime. Additionally, as Java Digital Machine or the JVM and never the compiler determines methodology invocation, it’s runtime polymorphism.

class Hillstations{  
  void location(){
System.out.println("Location is:");
}  
void famousfor(){
System.out.println("Well-known for:");
}  

}  
class Manali extends Hillstations {  
  void location(){
System.out.println("Manali is in Himachal Pradesh");
}  
void famousfor(){
System.out.println("It's Well-known for Hadimba Temple and journey sports activities");
}  
  }
class Mussoorie extends Hillstations {  
  void location(){
System.out.println("Mussoorie is in Uttarakhand");
}  
void famousfor(){
System.out.println("It's Well-known for training establishments");
}  
  }
class Gulmarg extends Hillstations {  
  void location(){
System.out.println("Gulmarg is in J&Okay");
}  
void famousfor(){
System.out.println("It's Well-known for snowboarding");
}  
  }
class principal{
  public static void principal(String args[]){ 
    Hillstations A = new Hillstations();
    Hillstations M = new Manali();

    Hillstations Mu = new Mussoorie();

    Hillstations G = new Gulmarg();

    A.location();
A.famousfor();

M.location();
M.famousfor();

Mu.location();
Mu.famousfor();

G.location();
G.famousfor();
  }  
}  

Output:

Location is:
Well-known for:
Manali is in Himachal Pradesh
It’s Well-known for Hadimba Temple and journey sports activities
Mussoorie is in Uttarakhand
It’s Well-known for training establishments
Gulmarg is in J&Okay
It’s Well-known for snowboarding

Instance of run-time polymorphism in java

We are going to create two courses Automotive and Innova, Innova class will lengthen the automobile class and can override its run() methodology.

class Automotive 
{ 
void run() 
{ 
System.out.println(“ operating”); 
} 
}
class innova extends Automotive 
{ 
void run(); 
{ 
System.out.println(“ operating quick at 120km”); 
} 
public static void principal(String args[]) 
{ 
Automotive c = new innova(); 
c.run(); 
} 
} 

The output of the next program can be; 

Working quick at 120 km. 

One other instance for run-time polymorphism in Java

Now, allow us to verify if we are able to obtain runtime polymorphism through information members. 

class automobile 
{ 
int speedlimit = 125; 
} 
class innova extends automobile 
{ 
int speedlimit = 135; 
public static void principal(String args[]) 
{ 
automobile obj = new innova(); 
System.out.println(obj.speedlimit);
}

The output of the next program can be : 

125 

This clearly implies we are able to’t obtain Runtime polymorphism through information members. Briefly, a way is overridden, not the info members.

Runtime polymorphism with multilevel inheritance

class grandfather 
{ 
void swim() 
{ 
System.out.println(“ Swimming”); 
} 
} 
class father extends grandfather 
{ 
void swim() 
{ 
System.out.println(“ Swimming in river”); 
} 
} 
class son extends father 
{ 
void swim() 
{ 
System.out.println(“ Swimming in pool”);
} 
public static void principal(String args[]) 
{ 
grandfather f1,f2,f3; 
f1 =new grandfather(); 
f2 = new father(); 
f3 = new son(); 
f1.swim(); 
f2.swim(); 
f3.swim(): 
} 
} 

The output of the next program can be: 

Swimming, Swimming in river, Swimming in pool

One other runtime polymorphism with multilevel inheritance instance

class soundAnimal 
{ 
public void Sound() 
{ 
System.out.println("Completely different sounds of animal"); }
} 
class buffalo extends soundAnimal 
{ 
public void Sound() 
{ 
System.out.println("The buffalo sound- gho,gho"); } 
} 
class snake extends soundAnimal 
{ 
public void Sound() 
{ 
System.out.println("The snake sound- his,his"); } 
} 
class tiger extends soundAnimal
{ 
public void Sound() 
{ 
System.out.println("The tiger sounds- roooo, rooo"); } 
} 
public class Animal Foremost 
{ 
public static void principal(String[] args) 
{ 
soundAnimal Animal = new soundAnimal(); soundAnimal buffalo = new buffalo(); 
soundAnimal snake = new snake(); 
soundAnimal tiger = new tiger(); 
Animal.Sound(); 
buffalo.Sound();
snake.Sound(); 
tiger.Sound(); 
} 
} 

The output of the next program can be; 

The buffalo sound- gho,gho 

The snake sound- his,his 

The tiger sound- roooo,roooo 

We hope you bought an concept about runtime and compile-time polymorphism.

Our Most In style Free Programs:


Polymorphic Subtypes

Subtype mainly signifies that a subtype can function one other sort’s subtype, sounds a bit difficult? 

Let’s perceive this with the assistance of an instance:

Assuming now we have to attract some arbitrary shapes, we are able to introduce a category named ‘form’ with a draw() methodology. By overriding draw() with different subclasses similar to circle, sq., rectangle, trapezium, and so on we are going to introduce an array of sort ‘form’ whose parts retailer references will check with ‘form’ subclass references. Subsequent time, we are going to name draw(), all shapes cases draw () methodology can be referred to as.

This Subtype polymorphism typically depends on upcasting and late binding. A casting the place you solid up the inheritance hierarchy from subtype to a supertype is termed upcasting.

To name non-final occasion strategies we use late binding. Briefly, a compiler mustn’t carry out any argument checks, sort checks, methodology calls, and so on, and depart all the pieces on the runtime. 

What’s Polymorphism in Programming?

Polymorphism in programming is outlined utilization of a single image to symbolize a number of differing kinds.

What’s Polymorphism Variables?

A polymorphic variable is outlined as a variable that may maintain values of various sorts in the course of the course of execution.

Why use Polymorphism in Java?

Polymorphism in Java makes it attainable to jot down a way that may appropriately course of a number of various kinds of functionalities which have the identical title. We are able to additionally achieve consistency in our code through the use of polymorphism.

Benefits of Polymorphism in Java

  1. It offers reusability to the code. The courses which can be written, examined and carried out might be reused a number of occasions. Moreover, it saves a variety of time for the coder. Additionally, the one can change the code with out affecting the unique code.
  2. A single variable can be utilized to retailer a number of information values. The worth of a variable you inherit from the superclass into the subclass might be modified with out altering that variable’s worth within the superclass; or every other subclasses.
  3. With lesser traces of code, it turns into simpler for the programmer to debug the code.

Traits of Polymorphism

Polymorphism has many different traits apart from Technique Overloading and Technique Overriding. They embody:

  • Coercion
  • Inside Operator Overloading
  • Polymorphic Variables or Parameters

1. Coercion

Coercion offers with implicitly changing one sort of object into a brand new object of a distinct type. Additionally, that is achieved robotically to stop sort errors within the code. 

Programming languages similar to C, java, and so on help the conversion of worth from one information sort to a different information sort. Knowledge sort conversions are of two sorts, i.e., implicit and express. 

Implicit sort conversion is robotically achieved in this system and this sort of conversion can also be termed coercion. 

For instance, if an operand is an integer and one other one is in float, the compiler implicitly converts the integer into float worth to keep away from sort error.

Instance :

class coercion {

  public static void principal(String[] args) {
    Double space = 3.14*5*7;
System.out.println(space);
String s = "comfortable";
int x=5;
String phrase = s+x;
System.out.println(phrase);

  }
}

Output:

109.9
happy5

2. Inside Operator Overloading

In Operator Overloading, an operator or image behaves in additional methods than one relying upon the enter context or the kind of operands. It’s a attribute of static polymorphism. Though Java doesn’t help user-defined operator overloading like C++, the place the consumer can outline how an operator works for various operands, there are few cases the place Java internally overloads operators.

Operator overloading is the idea of utilizing the operator as per your selection. Due to this fact, an operator image or methodology title can be utilized as a ‘user-defined’ sort as per the necessities. 

For instance, ‘+’ can be utilized to carry out the addition of numbers (identical information sort) or for concatenation of two or extra strings.

Within the case of +, can be utilized for addition and in addition for concatenation.

For instance:

class coercion {

  public static void principal(String[] args) {
    
String s = "comfortable";
String s1 = "world";
int x=5;
int y=10;

System.out.println(s+s1);
System.out.println(x+y);

  }
}

Output :

Equally, operators like! &, and | are additionally within the overload place for logical and bitwise operations. In each of those circumstances, the kind of argument will determine how the operator will interpret.

 3. Polymorphic Variables or Parameters

In Java, the article or occasion variables symbolize the polymorphic variables. It is because any object variables of a category can have an IS-A relationship with their very own courses and subclasses.

The Polymorphic Variable is a variable that may maintain values of various sorts in the course of the time of execution.

Parametric polymorphism specifies that whereas class declaration, a discipline title can affiliate with differing kinds, and a way title can affiliate with completely different parameters and return sorts.

For instance:

class Form
{
public void show()
{
System.out.println("A Form.");
}
}
class Triangle extends Form
{
public void show()
{
System.out.println("I'm a triangle.");
}
}
class Foremost{
public static void principal(String[] args)
{
Form obj;
obj = new Form();
obj.show();
obj = new Triangle();
obj.show();
}
}

Output:

A Form.
I’m a triangle.

Right here, the obj object is a polymorphic variable. It is because the superclass’s identical object refers back to the dad or mum class (Form) and the kid class (Triangle). 

Issues with Polymorphism 

With a number of benefits, there are additionally a couple of disadvantages of polymorphism.

  • Polymorphism is sort of difficult whereas implementation.
  • It tends to scale back the readability of the code.
  • It raises some severe efficiency points in real-time as nicely.

Kind Identification Throughout Downcasting 

Dwncasting is termed as casting to a toddler sort or casting a typical sort to a person sort.

So, we use downcasting at any time when we have to entry or perceive the habits of the subtypes. 

Instance, 

It is a hierarchical instance 

Meals> Vegetable> Ladyfinger, Tomato 

Right here, tomato and ladyfinger are two subclasses. 

In downcasting, we slender the kind of objects, which suggests we’re changing frequent sort to particular person sort. 

Vegetable vegetable = new Tomato(); 

Tomato castedTomato = (Tomato) vegetable; 

Right here we’re casting frequent sort to a person sort, superclass to subclass which isn’t attainable immediately in java.

We explicitly inform the compiler what the runtime sort of the article is.

Fragile base class drawback 

Fragile base class drawback is nothing however a elementary architectural drawback. 

Generally the improper design of a dad or mum class can lead a subclass of a superclass to make use of superclass in some unpredicted methods. 

The fragility of inheritance will result in damaged codes even when all the factors is met. 

This architectural drawback is termed as a fragile base class drawback in object-oriented programming programs and language. 

Mainly, the explanation for the delicate base drawback is that the developer of the bottom class has no concept of the subclass design. There isn’t a answer but for this drawback. 

Conclusion

We hope you need to have gotten a fundamental concept of polymorphism in Java and the way we use it in addition to issues associated to them. 

Therefore, this brings us to the top of the weblog on Polymorphism in Java. We additionally hope this lets you upskill your Java abilities. Moreover, to study extra about programming and different associated ideas, take a look at the programs on Nice Studying Academy

Additionally, if you’re making ready for Interviews, take a look at these Interview Questions for Java to ace it like a professional.

So, don’t cease your journey of studying. Additionally, don’t overlook to upskill and reskill your self. Preserve exploring and continue learning.

[ad_2]

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Most Popular

Recent Comments