我有一个界面“Vehicle”和实现该界面Car,Bicycle,Bike等的类。
我可以创建接口的Vector并为其分配实现类的实例吗? 例如:
Vector<Vehicle> vi;
vi.add(0, new Car());
vi.add(1, new Bicycle());
等
所以在运行时,我可以简单地检查索引并调用所需的函数吗?
答案 0 :(得分:3)
当然,你可以。这是运行时多态性使用的经典示例。
import java.util.Vector;
interface Vehicle {
public int getNumberOfWheels();
}
class Car implements Vehicle {
final int numberOfWheels = 4;
public int getNumberOfWheels() {
return numberOfWheels;
}
}
class Bicycle implements Vehicle {
final int numberOfWheels = 2;
public int getNumberOfWheels() {
return numberOfWheels;
}
}
public class Program {
public static void main(String args[]) {
Vector<Vehicle> vi = new Vector<Vehicle>();
vi.add(0, new Car());
vi.add(1, new Bicycle());
for(Vehicle v: vi) {
System.out.println(v.getClass().getName()
+ " has " + v.getNumberOfWheels() + " wheels");
}
}
}
<强> Demo 强>
答案 1 :(得分:1)
是的,你可以这样做。接口意味着以这种方式使用。
现在建议更好的方法来做到这一点:很难做到,因为你不清楚你需要做什么。第一个建议是使用ArrayList而不是Vector。两者之间的主要区别在于Vector是“同步的”,这意味着线程安全。但是,同步对性能有很大影响,Vector类通过同步对其所有方法的访问来实现完全线程安全。通常最好使用非同步容器,如果需要线程安全,则在容器外管理自己的同步,因为您可以根据使用情况将它们放在您需要的位置。
如果您的列表具有事先已知的固定大小,您甚至可以使用简单的数组,即:
Vehicle[] vi = new Vehicle[2];
vi[0] = new Car();
vi[1] = new Bicycle();