创建实现接口的所有类的向量

时间:2012-10-04 00:16:13

标签: java interface

我有一个界面“Vehicle”和实现该界面Car,Bicycle,Bike等的类。

我可以创建接口的Vector并为其分配实现类的实例吗? 例如:

Vector<Vehicle> vi;
vi.add(0, new Car());
vi.add(1, new Bicycle());

所以在运行时,我可以简单地检查索引并调用所需的函数吗?

2 个答案:

答案 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();