По сути, массивы имеют неявный тип, который является подклассом объекта. См. Массивы в JLS:
public static void main(String[] args) {
int[] ia = new int[3];
System.out.println(ia.getClass());
System.out.println(ia.getClass().getSuperclass());
}
> class [I
> class java.lang.Object
Способ обработки массивов и списков также не тот, когда мы рассматриваем ковариация / контравариантность .
List<Object> l = new ArrayList<String>(); // complain
Object[] l2 = new String[1]; // ok
l2[0] = 4; // throw ArrayStoreException.
Становится еще хуже, если мы рассмотрим дженерики, но это уже другая тема. В общем, я не знаю обоснования этого дизайна, но мы должны жить с ним.