10x Blogs Directory

Wednesday, April 1, 2009

Polymorphism

lPolymorphism in a Java program
-
  • The ability of a reference variable to change behavior according to what object instance it is holding.
  • This allows multiple objects of different subclasses to be treated as objects of a single super class, while automatically selecting the proper methods to apply to a particular object based on the subclass it belongs to.

There are 3 forms of Polymorphism

  • Method overloading
  • Method overriding through inheritance
  • Method overriding through the Java interface
Example:

Given the parent class Person and the subclass Student of the previous examples, we add another subclass of Person which is Employee

lIn Java, we can create a reference that is of type super class to an object of its subclass. For example,
public static main( String[] args ) {
Student studentObject = new Student();
Employee employeeObject = new Employee();
Person ref = studentObject; // Person reference points              // to a Student object
   String name = ref.getName();
}
  • Now suppose we have a getName method in our super class Person, and we override this method in both Student and Employee subclass's
public class Student {
public String getName(){
System.out.println(“Student Name:” + name);
return name;
}
}
public class Employee {
public String getName(){
System.out.println(“Employee Name:” + name);
return name;
}
}

l
  • Going back to our main method, when we try to call the getName method of the reference Person ref, the getName method of the Student object will be called. 
l
  • Now, if we assign ref to an Employee object, the getName method of Employee will be called.

l
  • Another example that illustrates polymorphism is when we try to pass a reference to methods as a parameter
l
  • Suppose we have a static method printInformation that takes in a Person reference as parameter
public static printInformation( Person p ){
       // It will call getName() method of the
       // actual object instance that is passed
       p.getName();
}

  • We can actually pass a reference of type Employee and type Student to the printInformation method as long as it is a subclass of the Person class.

public static main( String[] args )
{
Student studentObject = new Student();
Employee employeeObject = new Employee();
printInformation( studentObject );
printInformation( employeeObject );
}