Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法对非静态java进行静态引用_Java_Arrays - Fatal编程技术网

无法对非静态java进行静态引用

无法对非静态java进行静态引用,java,arrays,Java,Arrays,我正在努力学习java。如果我的概念不清楚或非常错误,请原谅我。 我正在尝试创建继承和多态应用程序 我已经创建了一系列动物[5]。我试图在数组中添加狗、猫的引用。 我想让它保持住 动物[0]=动物园狗 我得到一个错误 无法对非静态对象进行静态引用 我创建了AnimalstestDrivve类 package animals; public class AnimalstestDrive { public Animals[] myZoo = new Animals[5]; int

我正在努力学习java。如果我的概念不清楚或非常错误,请原谅我。 我正在尝试创建继承和多态应用程序

我已经创建了一系列动物[5]。我试图在数组中添加狗、猫的引用。 我想让它保持住 动物[0]=动物园狗

我得到一个错误 无法对非静态对象进行静态引用

我创建了AnimalstestDrivve类

package animals;

public class AnimalstestDrive {

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

    public static void main(String[] args) {

        //Set animals array
        Dog zooDog = new Dog();
        addAnimals(zooDog);

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

    }

    public void addAnimals(Animals a){
        if ( zooCounter > 5 ){
            myZoo[zooCounter] = a;
            zooCounter++;
        }
        else
            System.out.println("Zoo is full");
    }
}
这是我的动物课

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();

}
简单的狗,猫类

package animals;

public class Dog extends Animals {
    public void makeNoises(){
        System.out.println("Bow! bow!");
    }
}
main方法(static)尝试调用
addAnimals
方法,该方法的声明是非静态的。您需要首先创建该类的实例,然后在此实例上调用该方法

AnimalstestDrive testDrive = new AnimalstestDrive();
Dog zooDog = new Dog();
testDrive.addAnimals(zooDog);

有关更多信息,请参见

您需要一个类AnimalstestDrive的实例。静态意味着您不需要任何类的实例来使用class方法,因此如果您将addAnimals标记为静态,则可以使用该方法而不创建AnimalstestDrive的实例。

因为方法
addAnimals
不是静态的,您需要创建
animaltestdrive
的实例才能使用该函数。 当一个方法不是静态的时,它特定于该类的一个实例。例如:

AnimalstestDrive atd = new AnimalstestDrive();
atd.addAnimals(new Dog()); // this will add animals to "atd"
如果一个方法是静态的,它不是特定于类的实例,而是类本身

如果将此方法放入类
animaltestdrive

public static void staticMethod() {

}
您只能使用
animaltestdrive.staticMethod()
访问它,而不能使用
atd.staticMethod()


更多关于静态方法的信息。

如果一个类只有一种动物,那么给它命名
动物是个坏主意。应该是
Animal[]animals
。提问前请先回答。对于这个确切的问题,有足够的现有答案。可能重复