Comment appeler la méthode de remplacement d'une super-classe?

Comment puis-je appeler le manger et de boire de la méthode de la Animal de classe avec le myAnimal exemple, dans le code?

public class Animal {
    public void eat() {
        System.out.println("Animal Eats");
    }

    public void drink() {
        System.out.println("Animal Drinks");
    }
}

public class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("Cat Eats");
    }

    @Override
    public void drink() {
        System.out.println("Cat Drinks");
    }

    public static void main(String[] args) {
        Cat myCat = new Cat();
        myCat.eat();
        myCat.drink();

        Animal myAnimal = myCat;        
        myAnimal.eat();
        myAnimal.drink();
    }
}

Résultat que j'obtiens:

Cat Eats
Cat Drinks
Cat Eats
Cat Drinks

C'est mon attendus de sortie:

Cat Eats
Cat Drinks
Animal Eats
Animal Drinks
  • Vous voulez appeler la animal de mise en œuvre de sans la cat mise en œuvre?
  • Sauf si vous avez une méthode dans Cat sorcière appels super.eat(); vous ne pouvez pas le faire directement à partir de Cat
  • Vous ne devriez pas s'attendre à ce que vous attendez ... ne devrait pas en termes à la fois de la définition du langage et en termes de ce qui est raisonnable ou souhaitable de vouloir. Le point de l'ensemble de l'héritage, le polymorphisme est d'obtenir ce que vous voyez et non pas ce que vous dites que vous attendez.
  • Tandis que vos modifications @Michael ont éliminé (!) ce qui pourrait être considéré comme offensant, dans certains milieux, il y avait un brut de l'humour (comme un chat amant) reconnue et avec l'ajout d'un troisième méthode sleep() la question d'origine serait le modèle de félins, je l'ai connu assez bien. D'autre part beaucoup de gens ne donnent pas un morceau de ce qui a été transmuté ici... 8-P