Цель: не переопределять метод в каждом классе потомке (будь-то toString или getType), а чтоб метод класса родителя мог получить доступ (прочесть) статистическое поле класса наследника. В принципе текущий код (нашел его в инете) это и делает, но он мне не нравится. Я так понял, он переопределяет само поле. Так же была ещё одна мысль: если вместо
return ((Animal) o).getType();
написать
return Cat.type;
Получаем значение статической переменной type класса Cat. И вот как здесь использовать полиморфизм чтоб обратиться к полю type класса в зависимости от к какому классу принадлежит объект? o.getClass().getSimpleName() возвращает имя класса, вот если бы к этому имени дописать .type - всё бы работало.