Abstract list is exactly that: abstract. It doesn’t have an implementation. Many of the Collections APIs return an ArrayList on JVM (which is technically mutable, but only the read-only portion of its interface is exposed), or else some more optimized implementation for empty/singleton lists or platform-specific variants. But knowing it’s an ArrayList is just an implementation detail, and should not be relied upon