 <p>You forgot to override among others the <a href="http://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#size--" rel="nofollow"><code>size()</code></a> and <a href="http://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html#isEmpty--" rel="nofollow"><code>isEmpty()</code></a> methods. Moreover, you're never delegating to <code>ArrayList</code> superclass, but keeping an internal <code>ArrayList</code> instance. One would wonder why you extend from <code>ArrayList</code> at all instead of <a href="http://docs.oracle.com/javase/8/docs/api/java/util/AbstractList.html" rel="nofollow"><code>AbstractList</code></a> or even <a href="http://docs.oracle.com/javase/8/docs/api/java/util/List.html" rel="nofollow"><code>List</code></a>, which would in turn automatically force you to implement the right methods. An alternative would thus be to delegate to the <code>ArrayList</code> superclass instead of having an internal instance, so that the <code>size()</code> and <code>isEmpty()</code> calls would "automagically" return the right values.</p>