Допустим, у вас есть:
public interface A {}
public class B implements A {}
public class C {
void foo (List<A>) {}
}
public class Test {
//Declaration one
List<A> x = new List<A>();
//Declaration two
List<A> x = new List<B>();
B b = new B();
x.add(b);
new C().foo(x);
}
Теперь, очевидно, декларация 1 - это правильный способ сделать это, и вы получите ошибку компиляции в декларации 2. Я хотел бы знать, хотя, почему Java выбирает для обеспечения безопасности типов именно таким образом; если список кошек по-прежнему является списком животных, почему метод, ожидающий, что список животных блокируется при получении группы кошек?
Любопытство, больше всего на свете - и возможность улучшить мои знания.
Ура,
Дэйв.