我可以使用对象的向量来存储扩展该对象的多种类型的对象,比如我有一个类动物和两个类猫和狗,我创建了一个vector<animal>
,我想这样做: add(new dog())
和add(new cat())
是可能的吗?
答案 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阵列会更好。