В следующем коде типом 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 {}