Рассмотрим следующий код:
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 с разными значениями.
Будет неопределенность с generalConcreteClass в Line1, поэтомуприведение типа необходимо, и любой из TYPE может быть доступен.
Line2: объект транспортного средства имеет ссылку на интерфейс Vehicle.
Line3: как я могу привести объект транспортного средства к типу Car и тем не менееДоступ к постоянному типу автомобилей.Как это становится видимым для объекта транспортного средства.Или как это работает внутренне ??
Теперь, если я не заставляю свой класс реализовывать интерфейс Car, тогда приведение типа объекта транспортного средства к типу Car аналогично исключению ClassCastException.