Я хотел бы понять, как работает экземпляр.Java InstanceOf Output
Рассмотрим следующий код:
class A { }
class B extends A { }
class C extends B { }
class D extends C { }
public class TestClass{
public static void main(String args[]){
B b = new C(); //1
A a = b; //2
if (a instanceof A) System.out.println("A"); //3
if (a instanceof B) System.out.println("B"); //4
if (a instanceof C) System.out.println("C"); //5
if (a instanceof D) System.out.println("D"); //6
}
}
Поправьте меня, если я ошибаюсь здесь, для того, чтобы InstanceOf вернуться правда, IS-A условие должно быть выполнено. Если вы посмотрите на строку // 1. Во время выполнения программа знает, что объект, обозначенный ссылкой «a», имеет тип C. Следовательно, не должно только условие на строке // 5 быть на выходе? Почему A и B также выводятся?
D не отображается, потому что объект не является экземпляром D, и поэтому здесь нет путаницы. Но я не понимаю, почему A и B отображаются в консоли.
'a' является' A', потому что 'C расширяет B расширяет A'. 'a' является' B', потому что 'C расширяет B'. 'a' является' C', потому что, ну, это так. 'a' является _not_ a' D', потому что 'D extends C' и' a' является 'C'. –
Спасибо за помощь. –
Я поднимаю вопрос, чтобы исправить недостающие голоса. –