0

我正在学习java和多态。我正在使用 java 的书籍开头。我试图用它们做实验。我了解到您可以调用的方法取决于引用对象。所以我创建了这段代码

package animals;

public class AnimalstestDrive {

    static public Animals[] myZoo = new Animals[5];
    static int zooCounter = 0;

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        System.out.println("Dog 1 test");
        Dog myDog = new Dog();
        myDog.eatFood();
        myDog.sleep();
        myDog.makeNoises();

        System.out.println("Dog 2 test");
        Animals myNewDog = new Dog();
        myNewDog.eatFood();
        myNewDog.makeNoises();

        //Set animals array
        System.out.println("Dog 3 test");
        Animals zooDog = new Dog();
        addAnimals(zooDog);

        Cat zooCat = new Cat();
        addAnimals(zooCat);

        myZoo[0].makeNoises();


    }

    public static void addAnimals(Animals a){
        if ( zooCounter < 5 ){
            myZoo[zooCounter] = a;
            zooCounter++;
        }
        else
            System.out.println("Zoo is full");
    }
}

引起我问题的一件事是控制台上没有显示“Dog 3 test”。它工作正常,直到狗 2,但狗 3 不工作。

这是我的动物课

package animals;

public abstract class Animals {
    private String Name;
    private int Size; //Size on the scale 1 to 10

    public void eatFood(){
        System.out.println("I am eating food");
    }

    public void sleep(){
        System.out.println("I am sleeping now");
    }

    abstract public void makeNoises();

}
4

1 回答 1

0

我认为这是一个错字,因为您正在使用的一个地方和您正在使用的myNewDog.makeNoises()另一个地方myZoo[0].makeNoise();

因此,如果它是一个错字,请将其更改为 myZoo[0].makeNoises();


关于 upcasting and downcasting看到关于类变量的向上转换和向下转换有什么区别

向上转换是转换为超类型,而向下转换是转换为子类型。

因此,当您键入Animals zooDog = new Dog();它时,它会向上转换。
这是一种失望Dog newDog = (Dog)zooDog;

有关更多详细信息,请参阅JLS 5.5.1。引用类型转换

于 2015-05-04T05:51:34.783 回答