Экземпляр, который вы создаете, имеет тип A
, поэтому, поскольку обе переменные имеют одинаковое имя, вы получите суперкласс ', если вы хотите B
', вы должны сделать
B b = new B()
System.out.println(b.i)
Вы не должны использовать переменные с одинаковыми именами между суперклассами и подклассами, они очень запутаны и отчасти побеждают цель наследования.