2011-12-01 39 views
0

其他情形請看下面的代碼:在重寫接口

public class Main implements Vehicle, Car { 
    public static void main(String[] args) { 
    Main generalConcreteClass = new Main(); 
    System.out.println(((Vehicle) generalConcreteClass).TYPE); //**Line 1** 

    Vehicle vehicle = new Main(); //**Line 2** 
    System.out.println(vehicle.TYPE);// Here there is no Ambiguity since vehicle is of TYPE vehicle 

    System.out.println(((Car)vehicle).TYPE); // **Line3** This doesn't throw ClassCastException.. 
    } 
} 

在這裏,無論是接口汽車及汽車具有相同的常量類型具有不同的價值。

Line1中的generalConcreteClass會有不明確的地方,所以需要進行類型轉換,並且可以訪問TYPE中的任何一個。第二行:車輛對象具有車輛接口的參考。

Line3:如何將我的車輛對象轉換爲車型並仍然可以訪問常量車型。車輛物體如何變得可見?或者它如何在內部工作?

現在,如果我不讓我的類實現Car接口,那麼類型Car類型的車輛類型鑄造拋出ClassCastException。

回答

5

靜態方法和字段不是多態的。你永遠不應該使用一個實例來訪問一個靜態字段。使用Vehicle.TYPECar.TYPE

如果要以多態方式訪問對象的類型,請使用getType()實例方法。

第3行不拋出ClassCastException,因爲對象的具體類型是Main,而Main是Car,所以可以使用Cast。