Добавление OSD для раздела

Поскольку Java не имеет наследования множественного класса, во время компиляции абсолютно известно, что объект obj типа B не может быть подтипом A. С другой стороны, возможно, это может быть подтип интерфейса C, например, в этом случае:

interface C {}

class B {}

class D extends B implements C {}

public class A {
    public static void main(String args[]) {
        B obj = new D();
        System.out.println(obj instanceof C);      //compiles and gives true as output  
    }
}

Так что, глядя только в obj instanceof C, компилятор выражения не может заранее сказать, будет ли оно истинным или false, но, глядя на obj instanceof A, он знает, что это всегда ложно, поэтому бессмысленно и помогает предотвратить ошибку. Если вы все еще хотите иметь эту бессмысленную проверку в своей программе, вы можете добавить явное литье к Object:

System.out.println(((Object)obj) instanceof A);      //compiles fine
-1
задан user39063 13 July 2018 в 23:20
поделиться