You are on page 1of 16

pdfcrowd.com open in browser PRO version Are you a developer?

Try out the HTML to PDF API


Join to get new posts by mail
Never miss any post!!! We will mail you
directly whenever a new article is posted
Email Address
Join
Search
Type Your Search Word.....
You are here: Home / OOPs Concepts / Dynamic Polymorphism
OOPS I/O STREAMS COLLECTIONS THREADS INTERVIEW QUESTIONS ABOUT AUTHOR
Dynamic Polymorphism
By S. Nageswara Rao, Corporate Trainer on May 17, 2011
Static binding and static polymorphism is achieved through method overloading. Now
let us go for dynamic polymorphism. Observe the following code.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Bird
{
public void eat() // I
{
System.out.println("All birds eat");
}
}
class Peacock extends Bird
{
public void eat() // II
{
System.out.println("Peacock eats grains");
}
}
class Vulture extends Bird
Free Online Database
zoho.com/creator/online-database
Create database apps in minutes. Just Drag-&-drop. Try NOW!
Java Bird Java Object C# to Java C++ Java
Java Tutorials,
tips, forums, faq
a blog for Java
pdfcrowd.com open in browser PRO version Are you a developer? Try out the HTML to PDF API
If you like our content, please show
your love by liking our page on
facebook & Google+
Nageswara Rao
28 followers
Follow
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
{
public void eat() // III
{
System.out.println("Vulture eats flesh");
}
}
class Crane extends Bird
{
public void eat() // IV
{
System.out.println("Crane eats fish");
}
}
public class DynamicPolyDemo
{
public static void main(String args[])
{
Bird b1 = new Bird(); b1.eat(); // calls I
Peacock p1 = new Peacock(); b1 = p1; b1.eat(); // calls II
Vulture v1 = new Vulture(); b1 = v1; b1.eat(); // calls III
Crane c1 = new Crane(); b1 = c1; b1.eat(); // calls IV
}
}
pdfcrowd.com open in browser PRO version Are you a developer? Try out the HTML to PDF API
Find us on Facebook
Way2Java
4,259 people like Way2Java.
Facebook social plugin
Like
In the above code, Bird is inherited by three classes Peacock, Vulture and
Crane. It is an example of hierarchical inheritance.
Subclasses Peacock, Vulture and Crane overrides the eat() method of Bird.
b1 = p1;
b1.eat();
In the above statement, subclass Peacock object p1 is assigned to super class Bird
object b1. Earlier, in Object Casting, we know if a subclass object is assigned to a
super class object, the super class object will call subclass overridden
method. As per this rule, b1 will call p1 eat() method. Infact, the b1 contains the
reference of p1.
b1 = v1;
b1.eat();
pdfcrowd.com open in browser PRO version Are you a developer? Try out the HTML to PDF API
Now, the Bird object b1 is assigned with the subclass Vulture object v1. Now the
earlier p1 reference is replaced by v1. Now b1 points to v1 location. Now b1 calls v1
eat method.
b1 = c1;
b1.eat();
Again, the v1 reference in the super class object b1 is replaced by Crane object c1.
Now, b1 calls Crane's eat() method.
Observe the code, the statement b1.eat() prints 4 different outputs by calling 4
different eat() methods. The same method when called different times giving different
values is known a polymorphism ("poly" means many and "morphism" means
forms).
Which eat() method is to be called is decided at runtime because in every statement
the address of the earlier subclass object is replaced. This address replacement
happens at runtime (and not at compile time). Which overridden method is to be
called is decided (or binded) dynamically at runtime. This feature is known as
dynamic binding. Because polymorphism is achieved dynamically at runtime, this
is known as dynamic polymorphism.
Dynamic binding is also called as dynamic method dispatch as which overridden
method is to be dispatched for execution is known at runtime.
To achieve dynamic polymorphism following rules must be obeyed.
1. There must be method overriding.
pdfcrowd.com open in browser PRO version Are you a developer? Try out the HTML to PDF API
2. Subclass object must be assigned to a super class object.
The rule followed is "when a subclass object is assigned to a super class
object, the super object will call subclass overridden method".
We know earlier, static polymorphism which is achieved through method overloading.
Interface Polymorphism
The same Bird program, in the earlier example, can be modified to suit with
interfaces. Now declare Bird as an interface. We know that reference variables can
be created with abstract classes and interfaces (but not objects). Read the following
program.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
interface Bird
{
public abstract void eat(); // I
}
class Peacock implements Bird
{
public void eat() // II
{
System.out.println("Peacock eats grains");
}
}
class Vulture implements Bird
{
public void eat() // III
{
System.out.println("Vulture eats flesh");
Java Profiling Tools
semanticdesigns.com/DownLoad
Very low overhead, large systems. Client, Server, J2EE or embedded
pdfcrowd.com open in browser PRO version Are you a developer? Try out the HTML to PDF API
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
}
}
class Crane implements Bird
{
public void eat() // IV
{
System.out.println("Crane eats fish");
}
}
public class DynamicPolyDemo
{
public static void main(String args[])
{
Bird b1; // reference variable of interface
Peacock p1 = new Peacock(); b1 = p1; b1.eat(); // calls II
Vulture v1 = new Vulture(); b1 = v1; b1.eat(); // calls III
Crane c1 = new Crane(); b1 = c1; b1.eat(); // calls IV
}
}
Here Bird is interface and not a concrete class (in the earlier program it is concrete
class).
Bird b1;
b1 is reference variable and not object.
pdfcrowd.com open in browser PRO version Are you a developer? Try out the HTML to PDF API
b1 = p1;
b1.eat();
Subclass Peacock object is assigned to the reference variable b1 of interface Bird.
Here, super class is an interface and eat() is an abstract method. When a subclass
object is assigned to a super class reference variable, the reference variable calls
subclass overridden method. Now, b1 calls subclass Peacock's eat() method.
The addresses of subclass objects, p1, v1 and c1, in the super class reference variable
b1 are replaced in every statement dynamically at runtime. Every time when
b1.eat() method is called, it prints different outputs. This is known as polymorphism.
Because polymorphism is achieved at runtime dynamically, this is known as
dynamic polymorphism. Here, dynamic polymorphism is achieved
through interfaces.
Some questions for you from java.lang package.
1. How many ways you can copy one object properties to another?
Ans: 3 ways Shallow copying, Deep copying and Cloning.
2. How many types of inner classes exist?
Ans: 4 types.
3. What are JAR files?
Ans: JAR file is a zipped file zipped by JVM.
4. How to convert a string into string form?
Ans: String to data type conversions byte, short, int, long, float, double, char and
boolean.
5. How to convert an object to string?
Ans: Object to String toString()
pdfcrowd.com open in browser PRO version Are you a developer? Try out the HTML to PDF API
6. Do you know the functionality and methods of following java.lang package classes?
Ans: 1. Root class class Object 2. class Character 3. class System
7. What are wrapper classes?
Ans: Wrapper classes
8. What is the garbage collection mechanism in Java?
Ans: Garbage Collection gc() and exit(0)
9. How to use the C++ destructor functionality where Java does not support
destructors?
Ans: Java Destructor finalize()
10. How to compare two objects?
Ans: Object comparison hashCode() & equals()

Google+
Nageswara Rao
Follow 28
If you have any Questions, please ask below
2 comments
C# to Java C++ Java String Java Java Void
Add a comment...
Comment using...
0
0
Share
0 0
0
Share
1
Share
1
Share
pdfcrowd.com open in browser PRO version Are you a developer? Try out the HTML to PDF API
14 Responses
sumithra
April 21, 2014 at 11:56 am | Permalink | Reply
in above pgm wat is the use of DynamicPoleDemo() class? why didnt crate object for
that and wont be call other three metods by using this objct ?
S. Nageswara Rao, Corporate Trainer
April 21, 2014 at 8:30 pm | Permalink | Reply
It is a matter of convenience and clean code.
Posted in OOPs Concepts, Polymorphism | Tagged dynamic method binding java, interface polymorphism,
java dynamic method dispatch, Java dynamic polymorphism, late binding in java
Facebook social plugin
Aleeza Butt BSCS through VU
good
Reply Like February 13 at 6:38am
Hadia Javed
nice.
Reply Like September 15, 2013 at 11:48pm
PAGE 1 OF 1
pdfcrowd.com open in browser PRO version Are you a developer? Try out the HTML to PDF API
vijay reddy
December 7, 2013 at 5:33 pm | Permalink | Reply
If we call eat() with sub class objects p1,v1,c1 then which methods will be invoked?
if we call p1.eat() then also it prints peacock eats grains then why should we use
object casting.Sir could you please explain?
S. Nageswara Rao, Corporate Trainer
December 8, 2013 at 5:08 am | Permalink | Reply
To call with other class object through dynamic polymorphism.
Mona
October 16, 2013 at 11:37 am | Permalink | Reply
Hi, Mr.Nageshwara Rao
I have a query regarding Derived Casting.
Can u please explain me with a program that y do v get an Runtime Error called Class
Cast Exception and what is the solution to be undertaken.
Regards,
Mona
pdfcrowd.com open in browser PRO version Are you a developer? Try out the HTML to PDF API
S. Nageswara Rao, Corporate Trainer
October 26, 2013 at 2:53 pm | Permalink | Reply
See this link. This link is developed keeping your query in mind.
http://way2java.com/java-general/java-object-casting-problems/
Raja
May 14, 2013 at 11:22 am | Permalink | Reply
Can you pl explain whats the significance of having dynamic polymorphism in Java?
What is the exact real life usage for this feature? In this case any way we are creating
subclass object & then assigning that to a superclass reference variable. Instead of
calling the method through the reference variable of super class we can invoke the
same using respective subclass variable itself. I am sure when this feature is there
they would have thought for good real life fit for this.
S. Nageswara Rao, Corporate Trainer
May 15, 2013 at 1:35 pm | Permalink | Reply
1. With one class (super class) object, we can get the result required by the
user.
2. User may pass any object he likes.
pdfcrowd.com open in browser PRO version Are you a developer? Try out the HTML to PDF API
3. If you call subclass object, each subclass may have different methods.
4. When you extend super class, the sub classes will have uniform methods.
5. The same method of super class, the sub class may fill with its own code.
mohan
October 23, 2012 at 12:53 pm | Permalink | Reply
how can reference variable of Runnable interface call getClass() of java.lang.Object
though getclass Method is not present in Runnable interface?
mohan
October 20, 2012 at 11:39 pm | Permalink | Reply
The rule followed is when a subclass object is assigned to a super class object, the
super object will call subclass overridden method.
Runnable r= new Thread();
System.out.println(the class name of r is +r.getClass());
could you explain how r is able to call getClass() as it is not in Runnable interface.
akshiya
pdfcrowd.com open in browser PRO version Are you a developer? Try out the HTML to PDF API
June 30, 2012 at 9:45 pm | Permalink | Reply
sir,pls tell me example program for separate method overloading and method
overriding by using constructor..
S. Nageswara Rao, Corporate Trainer
July 1, 2012 at 7:26 pm | Permalink | Reply
First of all constructors cannot be overridden but can be overloaded. You
wanted method overloading using constructors. Following is the program.
public class Demo
{
public Demo()
{
display();
display(10);
display(10, 20);
}
public void display()
{
System.out.println(Hello 1);
}
public void display(int x)
{
System.out.println(x);
}
public void display(int x, int y)
pdfcrowd.com open in browser PRO version Are you a developer? Try out the HTML to PDF API
{
System.out.println(x*y);
}
public static void main(String args[])
{
new Demo();
}
}
Gaurav Sharma
January 28, 2012 at 4:38 pm | Permalink | Reply
Hi
I have a query related to this post .
Though you are saying that
when a subclass object is assigned to a super class reference, the super reference will
call subclass overridden method
but we can also call the toString() method of Object Class and other methods of it
from the superClass/interface reference
Despite they are not been overridden..
So , How why it is happening ???
Will you please explain me
pdfcrowd.com open in browser PRO version Are you a developer? Try out the HTML to PDF API
Name * Email *
Regards
Gaurav Sharma
S. Nageswara Rao, Corporate Trainer
January 28, 2012 at 4:43 pm | Permalink | Reply
toString() functionality is very different. The advantage of object casting
(subclass to super class) is that factory methods work where we get an object
of an interface like Connection, Statement and ResultSet etc.
Leave a Reply
Website
Comment
pdfcrowd.com open in browser PRO version Are you a developer? Try out the HTML to PDF API
Copyright 2014 Java Tutorials, tips, forums, faq.
Post Comment
Notify me of follow-up comments by email.
Notify me of new posts by email.