Потому что указывает на реализацию Б.
И объявлен как А.
Итак, поведение Б. И методы, видимые из А.
Чтобы использовать методы B, сделайте вот так
((B) a).getIntVar();
Думай об этом так
Object o = new FancyObject();
При компиляции этого метода будут приниматься только методы Objects, хотя это FancyObjcet с большим количеством методов.
Чтобы использовать методы FancyObject для o, выполните следующие действия.
Object o = new FancyObject();
(FancyObject o).fancyMethod();
Цитата "потому что я сейчас использую экземпляр типа A" Вы все еще используете экземпляр типа B. Вы можете видеть его так, как будто вы повысили b, но это тот же экземпляр.
Перекрестная ссылка с другого сайта с кредитами на картинке. Если это противоречит правилам, кто-то может редактировать эту часть моего ответа.