请考虑以下代码:
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..
}
}
Run Code Online (Sandbox Code Playgroud)
这里,Vehicle和Car接口都具有相同的常量TYPE,具有不同的值.
Line1上的generalConcreteClass会有歧义,因此需要进行类型转换,并且可以访问任何一个TYPE.
Line2:车辆对象有车辆界面参考.
第3行:如何将我的车辆对象转换为Car类型并仍然可以访问常量TYPE of Car.如何使车辆物体可见.或者它如何在内部工作?
现在,如果我不使我的类实现Car接口,那么类型的类型转换车辆对象类型Car会抛出ClassCastException.
静态方法和字段不是多态的.您永远不应该使用实例来访问静态字段.使用Vehicle.TYPE或Car.TYPE.
如果要以多态方式访问对象的类型,请使用getType()实例方法.
第3行不会抛出ClassCastException,因为对象的具体类型是Main,而Main是Car,因此可以进行转换.
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |