我有一个接口“车辆”,并实现该接口汽车类所有类的载体,自行车,自行车等创建实现接口
我可以创建接口的矢量和分配给它的实现类的实例? 对于前:
Vector<Vehicle> vi;
vi.add(0, new Car());
vi.add(1, new Bicycle());
等
所以在运行时,我可以简单地检查索引并调用所需的功能?
我有一个接口“车辆”,并实现该接口汽车类所有类的载体,自行车,自行车等创建实现接口
我可以创建接口的矢量和分配给它的实现类的实例? 对于前:
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();
请提出其他更好的方法来做到这一点。 – user1071840
您是否尝试过实施您的解决方案? – Luhar
我试着用这种方法实现它: Vector vi = new Vector (); vi.add(0,new Bike()); 但是,日食是抛出以下错误:在该行 \t 多个标志 - 令牌(S)语法错误,错位 \t结构(S) \t - 令牌“),”语法错误,删除此令牌 \t - 令牌上的语法错误,删除这些令牌 –
user1071840