请考虑以下代码:
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..
}
}
这里,Vehicle和Car接口都具有相同的常量TYPE,具有不同的值。
Line1上的generalConcreteClass会有歧义,因此需要进行类型转换,并且可以访问任何一个TYPE。
Line2:车辆对象参考了车辆界面。
Line3:如何将我的车辆对象转换为Car类型并仍然可以访问常量TYPE类型的Car。如何使车辆物体可见。或者它是如何在内部工作的?
现在,如果我不使我的类实现Car接口,那么类似于车型对象的类型转换类型为Car会抛出ClassCastException。
答案 0 :(得分:5)
静态方法和字段不是多态的。您永远不应该使用实例来访问静态字段。使用Vehicle.TYPE
或Car.TYPE
。
如果要以多态方式访问对象的类型,请使用getType()
实例方法。
第3行不会抛出ClassCastException,因为对象的具体类型是Main,Main是Car,因此可以进行转换。