我有一個接口「車輛」,並實現該接口汽車類所有類的載體,自行車,自行車等創建實現接口
我可以創建接口的矢量和分配給它的實現類的實例? 對於前:
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