我有一个接口“车辆”和实现该接口汽车、自行车、自行车等的类。
我可以创建接口的 Vector 并为其分配实现类的实例吗?例如:
Vector<Vehicle> vi;
vi.add(0, new Car());
vi.add(1, new Bicycle());
等等
那么在运行时,我可以简单地检查索引并调用所需的函数吗?
你当然可以。这是运行时使用多态性的经典示例。
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");
}
}
}
是的,你可以这么做。接口应该以这种方式使用。
现在建议更好的方法来做到这一点:很难做到,因为不太清楚你需要做什么。第一个建议是使用 ArrayList 而不是 Vector。两者的主要区别在于 Vector 是“同步的”,这意味着线程安全。但是,同步对性能有很大影响,Vector 类通过同步对其所有方法的访问来实现完全的线程安全。通常最好使用非同步容器,如果您需要线程安全,则在容器外管理您自己的同步,因为您可以根据使用情况将它们仅放在需要它们的地方。
在您的列表具有预先知道的固定大小的极端情况下,您甚至可以使用一个简单的数组,即:
Vehicle[] vi = new Vehicle[2];
vi[0] = new Car();
vi[1] = new Bicycle();