This has probably been asked before but i haven't been able to find a question.
I would like to understand the underlying reasons why does the following block of code not compile:
public class Box<T> {
    private T value;
    public Box(T value) {
        this.value = value;
    }
    public T getValue() {
        return value;
    }
    public static void main(String[] args) {
        Box<Integer> i = new Box<Integer>(13);
        // does not compile
        Box<Object> o = i;
    }
}
 
     
     
     
     
    