Java 属于超类的不同类的对象的ArrayList?

Java 属于超类的不同类的对象的ArrayList?,java,arraylist,Java,Arraylist,在下面的代码中,应该在“”之间放置什么,以便我能够为动物超类的每个子类添加新对象 package animal; import javax.swing.JOptionPane; import java.util.ArrayList; public class Animal { public static void main(String[] args) { Animal createAnimals = new Animal(); createAnim

在下面的代码中,应该在“”之间放置什么,以便我能够为动物超类的每个子类添加新对象

package animal;

import javax.swing.JOptionPane;
import java.util.ArrayList;

public class Animal {

    public static void main(String[] args) {
        Animal createAnimals = new Animal();
        createAnimals.userInputHandle();

        ArrayList <> animalList = new ArrayList<>(); 
        animalList.add(new Dog);

    }

    private String userInputHandle(){

        String userInput;
        userInput = JOptionPane.showInputDialog("Select animal from the "
                + "following list"
                + "\n1.Dog\n2.Cat\n3.Snake\n4.Frog"
                + "\n5.Human\n6.Shark\n7.Sea Gulls");
        userInput = userInput.toLowerCase();

    return userInput;}
}

class Fish extends Animal{




}
class Amphibians extends Animal{

}
class Reptiles extends Animal{}
class Birds extends Animal{}
包装动物;
导入javax.swing.JOptionPane;
导入java.util.ArrayList;
公营动物{
公共静态void main(字符串[]args){
动物创造动物=新动物();
createAnimals.userInputHandle();
ArrayList animalList=新的ArrayList();
动物学家。添加(新狗);
}
私有字符串userInputHandle(){
字符串用户输入;
userInput=JOptionPane.showInputDialog(“从列表中选择动物”
+“以下列表”
+“\n1.狗\n2.猫\n3.蛇\n4.青蛙”
+“\n5.人类\n6.鲨鱼\n7.海鸥”);
userInput=userInput.toLowerCase();
返回userInput;}
}
鱼纲动物{
}
两栖类动物{
}
爬行动物类扩展动物{}
鸟类类动物{}

所以我将在Animal类中创建一个方法,并为每个子类重写它。例如,对于两栖动物-->青蛙属于两栖类等等。

如果您做出声明

ArrayList <Animal> animalList = new ArrayList<Animal>(); 
ArrayList animalList=new ArrayList();

然后你就可以添加任何动物的子类了。

如果你做出声明的话

ArrayList <Animal> animalList = new ArrayList<Animal>(); 
// this will work fine as 'Animal' will be base class for other class
ArrayList <Animal> animalList = new ArrayList<Animal>(); 
//
animalList.add(new Reptiles());
animalList.add(new Birds());
animalList.add(new Amphibians());
ArrayList animalList=new ArrayList();
然后,您将能够向其中添加任何Animal子类。

//这将很好地工作,因为“Animal”将是其他类的基类
// this will work fine as 'Animal' will be base class for other class
ArrayList <Animal> animalList = new ArrayList<Animal>(); 
//
animalList.add(new Reptiles());
animalList.add(new Birds());
animalList.add(new Amphibians());
ArrayList animalList=新的ArrayList(); // 添加(新爬行动物()); 动物学家。添加(新鸟()); 添加(新的两栖动物());
//这将很好地工作,因为“Animal”将是其他类的基类
ArrayList animalList=新的ArrayList();
//
添加(新爬行动物());
动物学家。添加(新鸟());
添加(新的两栖动物());

像这样在ArrayList上声明

ArrayList <Animal> animalList = new ArrayList<Animal>();
ArrayList <Animal> animalList = new ArrayList<>();
等等

如果您使用的是JavaSE7,那么实例化泛型(在您的例子中是ArrayList)的另一种方法就是使用这样的有限类型推断

ArrayList <Animal> animalList = new ArrayList<Animal>();
ArrayList <Animal> animalList = new ArrayList<>();
ArrayList animalList=new ArrayList();

像这样在ArrayList上声明

ArrayList <Animal> animalList = new ArrayList<Animal>();
ArrayList <Animal> animalList = new ArrayList<>();
等等

如果您使用的是JavaSE7,那么实例化泛型(在您的例子中是ArrayList)的另一种方法就是使用这样的有限类型推断

ArrayList <Animal> animalList = new ArrayList<Animal>();
ArrayList <Animal> animalList = new ArrayList<>();
ArrayList animalList=new ArrayList();

它将仅为“Animal”,因为您将从“Animal”类派生类的其余部分。它将仅为“Animal”,因为您将从“Animal”类派生类的其余部分。这解决了它。也不能弄明白那件事是多么愚蠢。谢谢。非常欢迎,请将问题标记为已解决,因为这也将帮助其他学习者!在编程的世界里,有一种像坚果一样的愚蠢,每件事都是一种体验,在我生命中的某个时刻,我一直走在同一条道路上:P!这就解决了问题。也不能弄明白那件事是多么愚蠢。谢谢。非常欢迎,请将问题标记为已解决,因为这也将帮助其他学习者!在编程的世界里,有一种像坚果一样的愚蠢,每件事都是一种体验,在我生命中的某个时刻,我一直走在同一条道路上:P!