2012-10-04 65 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();