Есть 3 класса:
class Person{}
class Student extends Person{}
class Pair<T>
{
private T first;
public void setFirst(T first)
{
this.first = first;
}
public T getFirst()
{
return first;
}
}
Pair<Person> person = new Pair<Person>();
person.setFirst(new Person());
Person p = person.getFirst(); // работает
Pair emp = person;
emp.setFirst(new Person());
Person pers = emp.getFirst(); // ОШИБКА!! Object cannot be converted to Person
Почему ошибка? В первом случае из-за стирания типов будет тоже возвращаться Object, который автоматически преобразуется в Person. Почему во втором случае он автоматически не преобразуется?
С явным приведением работает
Person pers = (Person)emp.getFirst();