2015-06-07 40 views
2

我有一个抽象的动物类和其他子类,如爬行类,这些子类被进一步继承。
我已创建阵列初始化动物,如下所示:在ArrayList中存储不同类的对象

public void initializeArray() 
{ 
    zooAnimal = new Animal[10];   // We will make 10 animals: 

    // Polymorphism allows us to assign an object of a subclass to an 
    // object reference to a superclass/ancestor. 
    zooAnimal[0] = new Kookaburra("Kelly",5);  // A 5kg kookaburra 
    zooAnimal[1] = new Lizard("Lizzy",2,3);   // A 2kg, 3-year-old lizard 
    zooAnimal[2] = new Crocodile("Colin", 200, 7);  // a 7-yo 200kg croc. 
    zooAnimal[3] = new Rosella("Katie", 2, "Crimson");  // a 2-yo Crimson Rosella 
    zooAnimal[4] = new Rosella("Rosie", 4, "Green");  // a 4-yo Green Rosella 
    zooAnimal[5] = new Snake("Boris","Brown",15,3); // A Brown Snake, 15kg, 3 years 
    zooAnimal[7] = new Snake("Rita","Rattle",22,1); // A Rattle Snake, 22kg, 1 years 
    zooAnimal[6] = new Dolphin("Dolly", 142, 6); // A heavy, 6-yo dolphin. 
    zooAnimal[8] = new Kookaburra("Kenneth",4);  // A 4kg kookaburra 
    zooAnimal[9] = new Rosella("Yippy", 1, "Yellow");  // a 1-yo Yellow Rosella 
} 

但我想改为使用阵列的ArrayList以实现相同
这可以做什么?

我的动物类的子类是这样的:

动物类

public abstract class Animal 
{ 
    private int weight; 
    private int age; 
    private String name; 

    protected Animal(String name, int weight, int age) 
    { 
     this.name = name; 
     this.weight = weight; 
     this.age = age; 
    } 

    public final int getWeight() { return weight; } 

    public final int getAge() { return age; } 

    public final String getName() { return name; } 

    public abstract void makeNoise();  // Must be implemented by a subclass 

    /** Provides a default description of the animal. 
    * Sub-classes should override. */ 
    public String toString() 
    { 
     return "Animal Object: [name=" + name + ", age=" + age + ", weight=" + weight + "]"; 
    } 
} 

而且我有一个Bird类(子类Animal类的),一个Kookabura类(子(Animal),Reptile类(Animal类的子类)和Lizard子类(Reptile类的子类)等等!

+0

'List zooList = new ArrayList()<>; zooList.add(new AnimalSubclss(...)';' –

+0

非常感谢。只是后面的另一个问题,我可以使用这个ArrayList来像私人地图> placeMap = new HashMap <>();和placeMap(name,zoolist);类似的东西 –

回答

2

你可以这样做:

public void initializeList() { 
     List<Animal> animals = new ArrayList<Animal>(); 
     animals.add(new Kookaburra("Kelly",5)); 
     animals.add(new Lizard("Lizzy",2,3)); 
     animals.add(new Crocodile("Colin", 200, 7)); 
     animals.add(new Rosella("Katie", 2, "Crimson")); 
     animals.add(new Rosella("Rosie", 4, "Green")); 
     animals.add(new Snake("Boris","Brown",15,3)); 
     animals.add(new Snake("Rita","Rattle",22,1)); 
     animals.add(new Dolphin("Dolly", 142, 6)); 
     animals.add(new Kookaburra("Kenneth",4)); 
     animals.add(new Rosella("Yippy", 1, "Yellow")); 
    } 
3

你只需要声明一个ArrayList<Animal>,并使用add(Animal)方法,而不是分配(polimorphism允许你这样做):

private ArrayList<Animal> zooAnimals; 

public void initializeArray() { 
    // this 10 is optional, but it's good to specify it 
    // when you know the final length of your list in advance 
    zooAnimals = new ArrayList<>(10); 

    zooAnimals.add(new Kookaburra("Kelly", 5)); // A 5kg kookaburra 
    zooAnimals.add(new Lizard("Lizzy", 2, 3)); // A 2kg, 3-year-old lizard 
    zooAnimals.add(new Crocodile("Colin", 200, 7)); // a 7-yo 200kg croc. 
    zooAnimals.add(new Rosella("Katie", 2, "Crimson")); // a 2-yo Crimson Rosella 
    zooAnimals.add(new Rosella("Rosie", 4, "Green")); // a 4-yo Green Rosella 
    zooAnimals.add(new Snake("Boris", "Brown", 15, 3)); // A Brown Snake, 15kg, 3 years 
    zooAnimals.add(new Snake("Rita", "Rattle", 22, 1)); // A Rattle Snake, 22kg, 1 years 
    zooAnimals.add(new Dolphin("Dolly", 142, 6)); // A heavy, 6-yo dolphin. 
    zooAnimals.add(new Kookaburra("Kenneth", 4)); // A 4kg kookaburra 
    zooAnimals.add(new Rosella("Yippy", 1, "Yellow")); // a 1-yo Yellow Rosella 
} 
+0

我可以使用此ArrayList像私人地图> placeMap = new HashMap <>();和placeMap(name,zoolist);类似的东西 –

+0

是,这是完全可能的,你可以尝试使用'yourMap.put(name,zoolist);',其中'zoolist'是一个如上所述的列表。 – Joffrey

0

的java API提供了特殊的类来存储和操作对象组。其中一类是ArrayList的

注意ArrayList类是java.util.ArrayList中

创建一个ArrayList,就像任何对象。

import java.util.ArrayList; 
//.. 
ArrayList ajay = new ArrayList(); 

这里

  • 的ArrayList - >类

  • 阿贾伊 - >对象

您可以选择指定的容量和对象的类型的ArrayList将就:

ArrayList ajay<String> = new ArrayList<String>(10); 

ArrayList中提供用于操纵objects.The 添加各种方法(i)方法添加到对象列表和删除()方法从列表中删除对象。

示例代码:

import java.util.ArrayList; 

public class MyClass { 
    public static void main(String[ ] args) { 
     ArrayList<String> ajay = new ArrayList<String>(); 
     ajay.add("Red"); 
     ajay.add("Blue"); 
     ajay.add("Green"); 
     ajay.add("Orange"); 
     ajay.remove("Green"); 

     System.out.println(colors); 
} 
} 

我建议你的代码的解决方案以来,

public void initializeList() { 
     List<Animal> animals = new ArrayList<Animal>(); 
     animals.add(new Kookaburra("Kelly",5)); 
     animals.add(new Lizard("Lizzy",2,3)); 
     animals.add(new Crocodile("Colin", 200, 7)); 
     animals.add(new Rosella("Katie", 2, "Crimson")); 
     animals.add(new Rosella("Rosie", 4, "Green")); 
     animals.add(new Snake("Boris","Brown",15,3)); 
     animals.add(new Snake("Rita","Rattle",22,1)); 
     animals.add(new Dolphin("Dolly", 142, 6)); 
     animals.add(new Kookaburra("Kenneth",4)); 
     animals.add(new Rosella("Hippy",1,"Yellow"); 
} 

在你的代码,动物是一类和动物是一个对象的类。

相关问题