0

我有一个接口“车辆”和实现该接口汽车、自行车、自行车等的类。

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

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

等等

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

4

2 回答 2

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");
        }
    }
}

演示

于 2012-10-04T00:30:05.023 回答
1

是的,你可以这么做。接口应该以这种方式使用。

现在建议更好的方法来做到这一点:很难做到,因为不太清楚你需要做什么。第一个建议是使用 ArrayList 而不是 Vector。两者的主要区别在于 Vector 是“同步的”,这意味着线程安全。但是,同步对性能有很大影响,Vector 类通过同步对其所有方法的访问来实现完全的线程安全。通常最好使用非同步容器,如果您需要线程安全,则在容器外管理您自己的同步,因为您可以根据使用情况将它们仅放在需要它们的地方。

在您的列表具有预先知道的固定大小的极端情况下,您甚至可以使用一个简单的数组,即:

Vehicle[] vi = new Vehicle[2];
vi[0] = new Car();
vi[1] = new Bicycle();
于 2012-10-04T00:43:35.930 回答