2016-11-24 4 views
-3

Ich möchte ein Papagei (oder jedes andere Tier) Objekt in die Methode addAnimal (Tiertier) übergeben können. Ich weiß, dass ich Tiere direkt aus dem Konstruktor zur Array-Liste hinzufügen könnte, aber es werden später weitere Tiere hinzugefügt, die nicht im Konstruktor sind. Daher die öffentliche Methode.Wie kann ich eine Unterklasse als Argument für eine Methode übergeben, die die Superklasse möchte?

Wie kann ich alle Arten von Tieren als Argumente übergeben?

** Bearbeitet, um Konstruktor und grundlegende Syntaxprobleme zu beheben. Das Problem besteht immer noch.

class Zoo extends Animal{ 
    private ArrayList<Animal> animals; 

    public Zoo { 
    Parrot parrot = new Parrot(); 
    animals.addAnimal(parrot);  // cannot find methodaddAnimal(parrot) 
    } 

    public void addAnimal(Animal animal) { 
    animals.add(animal); 
    } 
} 

class Animal { 
    // variables and methods 
} 

class Parrot extends Animal { 
    // variables and methods 
} 
+0

Sie können 'animals.addAnimal (papagei)' nicht in der Mitte einer Klassendefinition schreiben. Diese Art von Anweisung muss in einer Methode enthalten sein. Auch deine 'Papagei' Klasse erweitert' Tier' statt 'Tier'. – khelwood

+0

Fragen Sie, warum dieser Code nicht kompiliert? Sie haben nach der Listendeklaration ein Semikolon vergessen. Und Sie fügen Code direkt in die Klasse ein, die nur in einer Methode existieren kann. Und ArrayList hat keine addAnimal-Methode, sondern nur eine add-Methode. Auch wenn alles behoben ist, wird es zur Laufzeit fehlschlagen, da Ihre Liste null ist. –

+0

Sorry Leute, ich habe versucht einen kleinen Teil meiner Quelle hier zu kopieren und ich habe keinen sehr guten Job gemacht. Ich werde bearbeiten und einen richtigen Konstruktor für Parrot hinzufügen und einige Syntaxprobleme beheben. Es gibt keine Syntaxfehler in meinem tatsächlichen Code. – KalebB

Antwort

0

Sie versuchen ArrayList Objekts addAnimal() Methode aufzurufen, die eher nicht vorhanden Sie addAnimal() des Zoo Klasse Objekt aufzurufen müssen, wie im folgenden Code mit Kommentaren gezeigt:

class Zoo { 

    private ArrayList<Animal> animals; 

    //create a main method 
    public static void main(String[] args) { 

     Zoo zoo = new Zoo();//Create Zoo object 
     Parrot parrot = new Parrot(); 
     zoo.addAnimal(parrot);//add parraot to list by calling addAnimal 
    } 

    public void addAnimal(Animal animal) { 
    animals.add(animal); 
    } 
} 
0
import java.util.ArrayList; 
import java.util.List; 

class Zoo { 
    private List<Animal> animals = new ArrayList<Animal>(); 
    public void addAnimal(Animal animal) { 
     animals.add(animal); 
    } 

    public static void main(String... args){ 
     Zoo zoo = new Zoo(); 
     zoo.addAnimal(new Parrot()); 
    } 
} 

class Animal { 
    // variables and methods 
} 

class Parrot extends Animal { 
    // variables and methods 
} 
Verwandte Themen