interface Flyer{ }
class Bird implements Flyer { }
class Eagle extends Bird { }
class Bat { }
public class TestClass {
public static void main(String[] args) {
Flyer f = new Eagle();
Eagle e = new Eagle();
Bat b = new Bat();
if(f instanceof Flyer) System.out.println("f is a Flyer");
if(e instanceof Bird) System.out.println("e is a Bird");
if(b instanceof Bird) System.out.println("f is a Bird");
}
}
Это пример кода из Enthuware. Я не могу понять, почему третий оператор instanceof (b instanceof Bird) не оценивает значение false, но вместо этого дает мне ошибку времени компиляции. P.S. -i не может получить то, что Enthuware пытался объяснить мнеinstanceof enthuware OCAJP
В компиляции ошибки времени, которое я получил, был
TestClass.java:16: Ошибка: неконвертируемые типы
если (б InstanceOf Bird) Система .out.println («f - птица»); ^
требуется: Птица
найдено: Bat
1 ошибка
Следующая ссылка имеет очень хорошее объяснение на ваш вопрос. http://stackoverflow.com/questions/31398444/the-instanceof-operator-behaves-differently-for-interfaces-and-classes –