Требуются ли ссылки на интерфейс для приведения класса к объектной ссылке? - PullRequest
1 голос
/ 21 марта 2020

При пересмотре сертификационного экзамена Java SE 8 Programmer I (ранее OCA) я натолкнулся на следующее утверждение:

"Ссылка на интерфейс требует назначения явного преобразования. для ссылки на любой класс, даже тот, который реализует интерфейс. Ссылка на интерфейс требует, чтобы для ссылки на класс было назначено явное приведение. "

Я думаю, что это немного неточно, поскольку возможно назначить ссылку на интерфейс ссылке на класс Object без явного приведения.

interface Animal {}

public class Dog implements Animal {
    public static void main(String[] args) {
        Animal animal = new Dog();
        Dog dog = animal; // Doesn't compile - requires explicit cast to Dog
        Object o = animal; // Compiles
    }
}

Это связано со связью между классом Object и интерфейсами, аналогичной описанной в в этом ответе относительно формата файла класса?
Из этого ответа относительно доступа к методам Java класса объектов с использованием ссылки на интерфейс, я резюмировал, что:

  • Используя ссылку на интерфейс, вы можете получить доступ только к методам, определенным в интерфейсе, но не к указанным классам c методов.
  • Вы можете получить доступ к методам класса Object через любую ссылку на интерфейс, потому что, хотя интерфейс не расширяется из класса Object, каждый интерфейс root в Java имеется неявное объявление методов, соответствующих каждому методу в классе Object.

JLS §9.2 - Члены интерфейса :

Если интерфейс не имеет прямых суперинтерфейсов, то интерфейс неявно объявляет метод абстрактного члена publi c с сигнатурой s, типом возврата r и выбрасывает условие t, соответствующее каждому методу открытого экземпляра m с сигнатурой s, тип возврата r и условие throws t, объявленное в Object, если только интерфейс явно не объявил метод с такой же сигнатурой, одинаковым типом возврата и совместимым предложением throws.

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