如何调用超类的重写方法?

His*_*eer 42 java inheritance overriding

如何使用代码中AnimalmyAnimal实例调用类的eat and drink方法?

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

    public void drink() {
        System.out.println("Animal Drinks");
    }
}
Run Code Online (Sandbox Code Playgroud)
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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到的输出:

Cat Eats
Cat Drinks
Cat Eats
Cat Drinks
Run Code Online (Sandbox Code Playgroud)

这是我的预期输出:

Cat Eats
Cat Drinks
Animal Eats
Animal Drinks
Run Code Online (Sandbox Code Playgroud)

Tof*_*eer 65

你无法做你想做的事.多态性的工作方式是做你所看到的.

基本上猫总是知道它是一只猫,并且总是表现得像一只猫,不管你是否像猫,猫科动物,猫科动物,猫科动物,猫科动物,食肉目,Theria,Mammalia,Vertebrata,Chordata,Eumetazoa,Animalia,动物,对象或其他任何东西:-)

  • 你确定吗. (2认同)

And*_*rma 19

在这里,您可以选择要调用的方法:

public class Cat extends Animal {

    public void superEat() {
        super.eat();
    }

    public void superDrink() {
        super.drink();
    }

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

    @Override
    public void drink() {
        System.out.println("Cat Drinks");
    }
}
Run Code Online (Sandbox Code Playgroud)


Pie*_*gen 6

这一行:

Animal myAnimal = myCat;

将变量分配给您之前创建myAnimal的对象myCat.因此,当您myAnimal.eat()在此之后调用时,您实际上正在调用原始myCat对象的方法,该方法将输出Cat Eats.

如果要输出Animal Eats,则必须为Animal变量分配实例.所以,如果你这样做:

Animal myAnimal = new Animal()

变量myAnimal将是一个实例Animal,因此将覆盖之前的赋值Cat.

如果你myAnimal.eat()在此之后调用,你实际上是在调用你创建eat()Animal实例的方法,它将输出Animal Eats.

总结:您的代码应为:

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 = new Animal();        
        myAnimal.eat();
        myAnimal.drink();
    }
}
Run Code Online (Sandbox Code Playgroud)