• Java
    • JAXB Tutorial
      • What is JAXB
      • JAXB Marshalling Example
      • JAXB UnMarshalling Example
  • Spring Tutorial
    • Spring Core Tutorial
    • Spring MVC Tutorial
      • Quick Start
        • Flow Diagram
        • Hello World Example
        • Form Handling Example
      • Handler Mapping
        • BeanNameUrlHandlerMapping
        • ControllerClassNameHandlerMapping
        • SimpleUrlHandlerMapping
      • Validation & Exception Handling
        • Validation+Annotations
        • Validation+ResourceBundle
        • @ExceptionHandler
        • @ControllerAdvice
        • Custom Exception Handling
      • Form Tag Library
        • Textbox Example
        • TextArea Example
        • Password Example
        • Dropdown Box Example
        • Checkboxes Example
        • Radiobuttons Example
        • HiddenValue Example
      • Misc
        • Change Config file name
    • Spring Boot Tutorial
  • Hibernate Tutorial
  • REST Tutorial
    • JAX-RS REST @PathParam Example
    • JAX-RS REST @QueryParam Example
    • JAX-RS REST @DefaultValue Example
    • JAX-RS REST @Context Example
    • JAX-RS REST @MatrixParam Example
    • JAX-RS REST @FormParam Example
    • JAX-RS REST @Produces Example
    • JAX-RS REST @Consumes Example
    • JAX-RS REST @Produces both XML and JSON Example
    • JAX-RS REST @Consumes both XML and JSON Example
  • Miscellaneous
    • JSON Parser
      • Read a JSON file
      • Write JSON object to File
      • Read / Write JSON using GSON
      • Java Object to JSON using JAXB
    • CSV Parser
      • Read / Write CSV file
      • Read/Parse/Write CSV File – OpenCSV
      • Export data into a CSV File
      • CsvToBean and BeanToCsv – OpenCSV

JavaInterviewPoint

Java Development Tutorials

Types of polymorphism in java – Runtime Polymorphism, Compile time Polymorphism

July 16, 2015 by javainterviewpoint 1 Comment

As we all know what is polymorphism in java, now its time to dig a bit deeper into it. There are two types of Polymorphism which is possible in Java, Runtime Polymorphism (Dynamic Binding) and Compile time Polymorphism (Static Binding). Lets take a look into it one by one.

Runtime Polymorphism(Dynamic Binding)

Method Overriding in Java is the best example for Runtime Polymorphism. In this type of Polymorphism the Parent class reference can hold object of Parent class or any sub class(Child class) of Parent. This technique is called as Dynamic Method Dispatch

//Assigning Parent class Object to Parent class reference
Parent p = new Parent();
//Assigning Child class Object to Parent class reference
Parent p = new Child();

Dynamic Method Dispatch is a technique in which the overriden method to call is resolved at the run-time rather than at compile time. In this technique we will assigning the Child object to the Parent class reference. Lets look into the below code

class Parent 
{
    public void display(String name)
    {
        System.out.println("Welcome to Parent Class \""+name+"\"");
    }
    public void disp()
    {
        System.out.println("disp() method of Parent class");
    }
}
public class Child extends Parent
{
    public void display(String name)
    {
        System.out.println("Welcome to Child Class \""+name+"\"");
    }
    public void show()
    {
        System.out.println("show() method of Child class");
    }
    public static void main(String args[])
    {
        //Assign Child Object to Parent class reference
        Parent pp = new Child();
        pp.display("JIP");
     }
}

Here we have assigned Child class object (new Child()) to Parent class reference (Parent pp) and now come the question which of the display() method will be called. Here the new Child() object is resolved in the run-time the display() method of the child class will be called and hence the output will be

Welcome to Child Class "JIP"

What if the child class didn’t override the parent class method?

In the above example of Dynamic Method Dispatch the child class has overriden the parent class display() method and hence the child class display() method is called, now the question is what will happen if the child class didn’t override the parent class method.

class Parent 
{
    public void display(String name)
    {
        System.out.println("Welcome to Parent Class \""+name+"\"");
    }
    public void disp()
    {
        System.out.println("disp() method of Parent class");
    }
}
public class Child extends Parent
{
    public void show()
    {
        System.out.println("show() method of Child class");
    }
    public static void main(String args[])
    {
        //Assign Child object to Parent class reference
        Parent pp = new Child();
        pp.display("JIP");
     }
}

When the Child class didn’t override the Parent class method as in the above case then the display() method of the Parent will be called.

Welcome to Parent Class "JIP"

Can the Child class method be called in the Dynamic Method Dispatch?

The answer is NO, Lets try to call the show method of the Child class

class Parent 
{
    public void display(String name)
    {
        System.out.println("Welcome to Parent Class \""+name+"\"");
    }
    public void disp()
    {
        System.out.println("disp() method of Parent class");
    }
}
public class Child extends Parent
{
    public void display(String name)
    {
        System.out.println("Welcome to Child Class \""+name+"\"");
    }
    public void show()
    {
         System.out.println("show() method of child class");
    }
    public static void main(String args[])
    {
        //Assign Child refernce to Parent class
        Parent pp = new Child();
        pp.show();
     }
}

When you run the above code then we will get the below compile time exception “The method show() is undefined for the type Parent”. In Dynamic Method Dispatch

  • The Overridden methods of the Child class can be called.
  • Non-Overridden methods of the Parent class can be called.
  • Child class methods cannot be called.

Compile time Polymorphism (Static Binding)

Method overloading in Java is the best example for Compile time Polymorphism. In Complie time Polymorphism the control flow is decided during the compile time itself.  Simply we can say that a class can have more than one method with a same name but difference in the parameters. Lets look into the below code for the better understanding.

class A
{
	public void disp()
	{
		System.out.println("Inside First disp method");
	}

	public void disp(String val)
	{
		System.out.println("Inside Second disp method, value is: "+val);
	}

	public void disp(String val1,String val2)
	{
		System.out.println("Inside Third disp method, values are : "+val1+","+val2);
	}
}
public class B
{
	public static void main (String args[])
	{
		A a = new A();
		a.disp(); //Calls the first disp method
		a.disp("Java Interview"); //Calls the second disp method
		a.disp("JavaInterview", "Point"); //Calls the third disp method
	}

}

Output

Inside First disp method
Inside Second disp method, value is: Java Interview
Inside Third disp method, values are : JavaInterview,Point

As we can see in the above example class A have 3 disp() methods but the number and type of parameter differs. In this scenario the compiler will be able to figure out which disp() method to call during the compile time itself based on number and type of parameter and hence it is called as Compile time Polymorphism.

Other interesting articles which you may like …

  • Abstract Class in Java
  • Interface in Java and Uses of Interface in Java
  • What is Marker Interface
  • Serialization and Deserialization in Java
  • Generate SerialVersionUID in Java
  • Java Autoboxing and Unboxing Examples
  • Use of Java Transient Keyword – Serailization Example
  • Use of static Keyword in Java
  • What is Method Overriding in Java
  • Encapsulation in Java with Example
  • Constructor in Java and Types of Constructors in Java
  • Final Keyword in Java | Java Tutorial
  • Java Static Import
  • Java – How System.out.println() really work?
  • Java Ternary operator
  • Java newInstance() method
  • Java Constructor.newInstance() method Example
  • Parameterized Constructor in Java

Filed Under: Core Java, Java, OOPs Tagged With: advantage, compile time, Compile time Polymorphism, dispatch, dynamic, Dynamic Binding, Dynamic Method Dispatch, example, Java, method, overriding, polymorphism, runtime, Runtime Polymorphism, Static Binding, Types of polymorphism

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Java Basics

  • JVM Architecture
  • Object in Java
  • Class in Java
  • How to Set Classpath for Java in Windows
  • Components of JDK
  • Decompiling a class file
  • Use of Class.forName in java
  • Use Class.forName in SQL JDBC

Oops Concepts

  • Inheritance in Java
  • Types of Inheritance in Java
  • Single Inheritance in Java
  • Multiple Inheritance in Java
  • Multilevel Inheritance in Java
  • Hierarchical Inheritance in Java
  • Hybrid Inheritance in Java
  • Polymorphism in Java – Method Overloading and Overriding
  • Types of Polymorphism in java
  • Method Overriding in Java
  • Can we Overload static methods in Java
  • Can we Override static methods in Java
  • Java Constructor Overloading
  • Java Method Overloading Example
  • Encapsulation in Java with Example
  • Constructor in Java
  • Constructor in an Interface?
  • Parameterized Constructor in Java
  • Constructor Chaining with example
  • What is the use of a Private Constructors in Java
  • Interface in Java
  • What is Marker Interface
  • Abstract Class in Java

Java Keywords

  • Java this keyword
  • Java super keyword
  • Final Keyword in Java
  • static Keyword in Java
  • Static Import
  • Transient Keyword

Miscellaneous

  • newInstance() method
  • How does Hashmap works internally in Java
  • Java Ternary operator
  • How System.out.println() really work?
  • Autoboxing and Unboxing Examples
  • Serialization and Deserialization in Java with Example
  • Generate SerialVersionUID in Java
  • How to make a class Immutable in Java
  • Differences betwen HashMap and Hashtable
  • Difference between Enumeration and Iterator ?
  • Difference between fail-fast and fail-safe Iterator
  • Difference Between Interface and Abstract Class in Java
  • Difference between equals() and ==
  • Sort Objects in a ArrayList using Java Comparable Interface
  • Sort Objects in a ArrayList using Java Comparator

Follow

  • Coding Utils

Useful Links

  • Spring 4.1.x Documentation
  • Spring 3.2.x Documentation
  • Spring 2.5.x Documentation
  • Java 6 API
  • Java 7 API
  • Java 8 API
  • Java EE 5 Tutorial
  • Java EE 6 Tutorial
  • Java EE 7 Tutorial
  • Maven Repository
  • Hibernate ORM

About JavaInterviewPoint

javainterviewpoint.com is a tech blog dedicated to all Java/J2EE developers and Web Developers. We publish useful tutorials on Java, J2EE and all latest frameworks.

All examples and tutorials posted here are very well tested in our development environment.

Connect with us on Facebook | Privacy Policy | Sitemap

Copyright ©2023 · Java Interview Point - All Rights Are Reserved ·