2015-05-03 5 views
-1

Я пытаюсь изучить Java. Простите меня, если мои понятия не ясны или очень неправильны. Я пытаюсь создать наследование и применение полиморфизма.не может статически ссылаться на нестатические java

Я создал массив животных [5]. Я пытаюсь добавить refrences собаки, cat к массиву. Я хочу, чтобы держать Животные [0] = zooDog

Я получаю ошибку, что не может сделать статическую ссылку на нестатической

У меня есть создать 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"); 
    } 
} 

здесь мой Animals класс

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!"); 
    } 
} 
+0

Плохая идея назвать класс «Животные», если это всего лишь одно животное. Должно быть «Животное [] животных». –

+0

Прошу [* искать сообщения об ошибках *] (http://stackoverflow.com/search?q=cannot+make+a+static+reference+to+the+non-static+java), прежде чем задавать вопрос. На эту точную проблему достаточно ответов на SO. – user2864740

+0

Возможный дубликат [Невозможно сделать статическую ссылку на нестатический метод] (http://stackoverflow.com/questions/4969171/cannot-make-static-reference-to-non-static-method) – user2864740

ответ

0

Вы должны иметь экземпляр класса AnimalstestDrive. Static означает, что вам не нужен какой-либо экземпляр класса для использования метода класса, поэтому, если вы отметите addAnimals как статический, вы можете использовать этот метод, не создавая экземпляр AnimalstestDrive.

2

Основной метод (статический) пытается вызвать метод addAnimals, декларация которого нестационарна. Вам нужно создать экземпляр класса, а затем вызвать метод этого экземпляра

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

См Understanding Class Members для получения дополнительной информации

0

Поскольку метод addAnimals не является статическим, вам необходимо создать экземпляр AnimalstestDrive, чтобы использовать эту функцию. Когда метод не является статичным, он специфичен для экземпляра этого класса. Например:

AnimalstestDrive atd = new AnimalstestDrive(); 
atd.addAnimals(new Dog()); // this will add animals to "atd" 

Если метод является статическим, он не является специфическим для экземпляра класса, но сам класс.

Если поместить этот метод в классе AnimalstestDrive:

public static void staticMethod() { 

} 

Вы можете получить доступ к нему только с AnimalstestDrive.staticMethod(), не atd.staticMethod().

Дополнительная информация о статических методах here.

Смежные вопросы