Приведение не теряет никакой информации в Java, оно просто меняет уровень абстракции (т. Е. Вы не можете получить доступ к методу getAttr2 () для 'o', пока он все еще приводится как объект)
Настоящая проблема - опечатка в модели2.Вы устанавливаете переменную attr2 для себя, которая имеет значение null, чтобы начинаться с
Вы хотите, чтобы она была this.attr2 = attr1
Я понимаю, что это, вероятно, простотестовый класс, но я также хотел бы отметить, что перед проверкой правильности рекомендуется проверить ваш аргумент - возможно, вам был передан нулевой или объект неправильного типа.
public void test(Object o) {
if (o == null) {
System.out.println("Don't give me a null");
} else if (o instanceof Model2) {
Model2 m = (Model2) o;
System.out.println(m.getAttr2());
} else {
System.out.println("Wrong type. Was given " + o.getClass());
}
}
В реальномкласс, в котором вы могли бы сделать что-то полезное в этих разделах, например, выбросить исключение