2016-11-24 72 views
-3

我希望能夠將一個鸚鵡(或任何其他動物)對象傳遞給方法addAnimal(動物動物)。我知道我可以直接從構造函數中將動物添加到數組列表中,但稍後會添加其他動物,這些動物不會在構造函數中。因此,公共方法。如何傳遞一個子類作爲想要超類的方法的參數?

我該如何讓各種動物作爲參數傳遞?

**編輯修復構造函數和基本語法問題。問題依然存在。

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

你不能在類定義中寫'animals.addAnimal(parrot)'。這種指令需要在方法中。此外,你的'鸚鵡類'延伸'動物'而不是'動物'。 – khelwood

+0

你問爲什麼這個代碼不能編譯?列表聲明後忘記了分號。你直接把代碼放在只能存在於方法中的類中。而ArrayList沒有addAnimal方法,只有一個add方法。即使所有這些都是固定的,它會在運行時失敗,因爲您的列表爲空。 –

+0

對不起,我試圖將我的一小部分源代碼複製到這裏,但我沒有做得很好。我將編輯併爲Parrot添加適當的構造函數並修復一些語法問題。在我的實際代碼中沒有任何語法錯誤。 – KalebB

回答

0

您正在試圖調用ArrayList對象的addAnimal()方法,它不存在,而你需要調用Zoo類對象的addAnimal()如在下面的代碼註釋:

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 
} 
相關問題