Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Java Polymorphism

This is a question just out of curiosity.

I know that when we call a subclass object's overridden method by the reference of it's superclass, JVM gives importance to the type of object and not to type of reference.

This is my simple code :

class Animal
{
    void eat()
    {
        System.out.println("Animal is eating...");
    }
}
class Horse extends Animal
{
    @Override
    void eat()
    {
        System.out.println("Horse is eating...");
    }
}
public class PolymorphismTest
{
    public static void main(String...args)
    {
        Animal a=new Animal();
        a.eat();

        Animal h= new Horse();
        h.eat();
    }
}

As expected, I get the output :

run:
Animal is eating...
Horse is eating...
BUILD SUCCESSFUL (total time: 0 seconds)

Now my question is , Is there any way that we can use reference h to call the superclass eat() method and not the subclass one? I know this is a question that is somewhat against the laws of polymorphism but you never know when the need may arise to do so.

I tried to typecast the reference h to Animal but no luck. Any ideas?

like image 590
Kameron Avatar asked Jun 11 '12 18:06

Kameron


3 Answers

class Horse extends Animal
{
    @Override
    void eat()
    {
        super.eat();
    }
}
like image 170
Brett Holt Avatar answered Nov 09 '22 09:11

Brett Holt


No, you'll have to explicitly do so in the overridden method (i.e. super.eat()).

like image 30
user1329572 Avatar answered Nov 09 '22 11:11

user1329572


You cannot do this by doing any form of typecasting. Your only way to call the method of the superclass is to either wrap it like Brett Holt showed, or you must have an object whose most specific runtime type is Animal.

like image 44
Jochen Avatar answered Nov 09 '22 10:11

Jochen