Java List vs ArrayList

generics, java

Solution

`List` is an interface, somewhat like a class with some `= 0` methods in C++. You can't instantiate it.

But `ArrayList<T>` "inherits" `List<T>` (or in Java terms, implements it), so those references are assignment-compatible.

Problem

As a C++ oldtimer I have managed to solve my problem but I can not wrap my head around the underlying Java mechanisms here: ``` Vector<Object> x = new Vector<Object>(); // OK ArrayList<Object> y = new ArrayList<Object>(); // OK List<Object> zzz = new ArrayList<Object>(); // OK solves problem below but question remains List<Object> z = new List<Object>(); // WHY? Compiler error: Cannot instantiate ```

Original source