Представьте dogобъект, созданный с помощью Object dog = new Dog(), затем:
dog instanceof Domestic // true - Dog implements Domestic dog instanceof Animal // true - Dog extends Animal dog instanceof Dog // true - Dog is Dog dog instanceof Object // true - Object is the parent type of all objects
Однако с Object animal = new Animal();,
animal instanceof Dog // false
потому что Animal это супертип Dog и, возможно, менее "утонченный".
И,
dog instanceof Cat // does not even compile!
Это связано с тем, что Dog не является ни подтипом, ни супертипом Cat , а также не реализует его.
Обратите внимание, что переменная, используемая для dog выше, имеет тип Object. Это делается для того, чтобы показать, что instanceof это операция времени выполнения, и подводит нас к варианту использования: реагировать по-разному в зависимости от типа объектов во время выполнения.
Следует отметить: expressionThatIsNull instanceof T имеет значение false для всех типов T.
Ответ 2
Это оператор, который возвращает true, если левая часть выражения является экземпляром имени класса в правой части.
Подумайте об этом так. Допустим, все дома в вашем квартале были построены по одним и тем же чертежам. Десять домов (объектов), один набор чертежей (определение класса).
instanceof это полезный инструмент, когда у вас есть коллекция объектов, но вы не уверены, что это такое. Допустим, у вас есть коллекция элементов управления в форме. Вы хотите прочитать проверенное состояние любых установленных флажков, но вы не можете запросить у простого старого объекта его проверенное состояние. Вместо этого вы увидите, является ли каждый объект флажком, и если это так, приведите его к флажку и проверьте его свойства.
if (obj instanceof Checkbox) { Checkboxcb= (Checkbox)obj; booleanstate= cb.getState(); }
publicclassinstanceoftest { publicstaticvoidmain(String args[]) { Map m=newHashMap(); System.out.println("Returns a boolean value "+(m instanceof Map)); System.out.println("Returns a boolean value "+(m instanceof HashMap)); System.out.println("Returns a boolean value "+(m instanceof Object)); System.out.println("Returns a boolean value "+(m instanceof Date)); } }
вывод таков:
Returns a boolean value true Returns a boolean value true Returns a boolean value true Returns a boolean value false