These questions are purely asked out of curiosity. I don\'t actually need to subclass an array, I\'m just trying to figure out more about how they work in Java.
You can't subclass arrays. Even though the syntax used with them is a bit different, they are objects (check with the JLS). There's not much API to them - apart from just what Object has (with toString() not doing what you expect, use Arrays.deepToString() for that; equals() and hashCode() are similar) there's the length field. Additionally, arrays are cloneable. You can only cast array types if the target element type is a supertype of the source element type - you can cast String[] to Object[] but not the other way around. If you are sure the objects in the array are a specific type, you can cast each element individually. String[][] is an array of String[], so it's a different type than String[] as its elements are arrays of String, not Strings. You can create classes which give similar functionality to arrays (ArrayList does just that), but they will not be interchangeable with regular arrays.