Are we actually instantiating an Abstract class here?
===

    // Concrete implementation built atop skeletal implementation
      static List<Integer> intArrayAsList(final int[] a) {
        if (a == null)
          throw new NullPointerException();
        return new AbstractList<Integer>() {
          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;
          }
        };
      }

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