覆盖接口的其他场景

时间:2011-12-01 12:07:35

标签: java interface

请考虑以下代码:

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。

1 个答案:

答案 0 :(得分:5)

静态方法和字段不是多态的。您永远不应该使用实例来访问静态字段。使用Vehicle.TYPECar.TYPE

如果要以多态方式访问对象的类型,请使用getType()实例方法。

第3行不会抛出ClassCastException,因为对象的具体类型是Main,Main是Car,因此可以进行转换。