我可以使用对象的向量来存储扩展该对象的多种类型的对象

时间:2014-01-08 21:11:37

标签: java generics vector

我可以使用对象的向量来存储扩展该对象的多种类型的对象,比如我有一个类动物和两个类猫和狗,我创建了一个vector<animal>,我想这样做: add(new dog())add(new cat())是可能的吗?

3 个答案:

答案 0 :(得分:3)

是;这完全有可能。

继承的全部要点是Dog Animal

答案 1 :(得分:2)

是的。这被称为polymorphism,这是计算机科学中的一个重要概念。

根据您的评论:

Class Dog和Cat都必须继承Animal。因此,任何动物的子类(亚型)也可以作为动物。狗是动物。猫是动物。这是一个简单的多态性示例,非常有用,因为它为您提供了很大的灵活性。任何与动物交互的代码都可以与任何类型的动物互动!

如果您需要访问Animal类中不存在的方法,则需要转换为特定类型的Animal。这是一个例子。

Vector<Animal> vector = new Vector<Animal>();
vector.add(new Cat());
vector.add(new Dog());
//later on, maybe I need access to a cat specific method...
int wiskerCount = 0;
for(Animal animal : vector){
    if(animal instanceof Cat){
        Cat cat = (Cat)animal;
        whiskerCount += cat.getNumberWhiskers();
    }
}

此外,Vector类基本上只是一个ArrayList,它是线程安全的。如果您没有从多个线程访问此对象,请改为使用ArrayList

答案 2 :(得分:1)

//import java.util.*;
//Declare a default Vector

public static void printSampleElements(){
    Vector all = new Vector();
    all.add("Hello");
    all.add(10);
    all.add(true);
    for(int a = 0; a < all.size(); a++){
        out.println(all.get(a));
    }
}

重点是你可以在矢量中添加任何东西。

看看这个。

v.add(new ArrayList <Integer>()); //add a blank list of ints.

ArrayList <Integer> list = new ArrayList <>();
list.add(10);
list.add(20);

v.add(list); //add the list variable 

你甚至可以将一个ArrayList添加到矢量中,尽管2D阵列会更好。