Почему этот код instanceof работает и не вызывает ошибку времени компиляции?

В следующем коде типом x является I (хотя x также реализует J, но это неизвестно во время компиляции), так почему же код в (1) не приводит к ошибка времени компиляции. Поскольку во время компиляции учитывается только тип ссылки.

public class MyClass {
    public static void main(String[] args) {
        I x = new D();
        if (x instanceof J) //(1)
            System.out.println("J");
    }
}

interface I {}

interface J {}

class C implements I {}

class D extends C implements J {}
6
задан BalusC 9 October 2010 в 19:45
поделиться