2012-10-04 69 views
0

我有一个接口“车辆”,并实现该接口汽车类所有类的载体,自行车,自行车等创建实现接口

我可以创建接口的矢量和分配给它的实现类的实例? 对于前:

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

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

+0

请提出其他更好的方法来做到这一点。 – user1071840

+0

您是否尝试过实施您的解决方案? – Luhar

+0

我试着用这种方法实现它: Vector vi = new Vector (); vi.add(0,new Bike()); 但是,日食是抛出以下错误:在该行 \t 多个标志 - 令牌(S)语法错误,错位 \t结构(S) \t - 令牌“),”语法错误,删除此令牌 \t - 令牌上的语法错误,删除这些令牌 – user1071840

回答

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

是的,你可以做到这一点。接口是为了这样使用。

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

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

Vehicle[] vi = new Vehicle[2]; 
vi[0] = new Car(); 
vi[1] = new Bicycle();