Идеально было бы смотреть в прошлое бесконечно много
new B()
) мы ничего не потеряли. Если нам нужно и то, и другое, можно было бы написать так:B b = new B(); //создали экземпляр наследника и сохранили ссылку в переменной
A a = (A) b; //привели его к базовому классу и сохранили в другой переменной
b.sum(); //тут пользуемся функционалом наследника
a.sum(); //тут пользуемся функционалом базового класса
B b = new B();
//...тут делаем что-то там с b...
//... а потом вдруг
((A)b).sum(); //пользуемся ей, как А
//...и дальше, как ни в чем не бывало, пользуемся b