Are we actually instantiating an Abstract class here?
<pre><code>// Concrete implementation built atop skeletal implementation
  static List&lt;Integer&gt; intArrayAsList(final int[] a) {
    if (a == null)
      throw new NullPointerException();
    return new AbstractList&lt;Integer&gt;() {
      public Integer get(int i) {
        return a[i]; // Autoboxing 
      }

      @Override
      public Integer set(int i, Integer val) {
        int oldVal = a[i];
        a[i] = val; // Auto-unboxing
        return oldVal; // Autoboxing
      }

      public int size() {
        return a.length;
      }
    };
  }
</code></pre>

<p>So far I knew we can not instantiate an abstract class at all . But what aren't we doing the same thing here with <code>return new AbstractList&lt;Integer&gt;()</code> ? I am confused .</p>
