Другие сценарии в переопределенном интерфейсе - PullRequest
0 голосов
/ 01 декабря 2011

Рассмотрим следующий код:

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.

1 Ответ

5 голосов
/ 01 декабря 2011

Статические методы и поля не являются полиморфными.Вы никогда не должны использовать экземпляр для доступа к статическому полю.Используйте Vehicle.TYPE или Car.TYPE.

Если вы хотите получить полиморфный доступ к типу объекта, используйте метод экземпляра getType().

Строка 3 не вызывает исключение ClassCastExceptionпотому что конкретный тип объекта - «Главный», а «Основной» - «Автомобиль», поэтому работает литье.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...