Para eso podrías usar una lista de elementos de la clase abstracta, y añadir los objetos de las clases hijas directamente.
List<Pieza> listaPiezas = new ArrayList<Pieza>();
listaPiezas.add(new Peon());
listaPiezas.add(new Peon());
listaPiezas.add(new Peon());
listaPiezas.add(new Caballo());
listaPiezas.add(new Caballo());
listaPiezas.add(new Alfil());
Luego para recuperarlos tendrías que ver que tipo es, implementando métodos como...
isPeon(Pieza p);
isCaballo(Pieza p);
isAlfil(Pieza p);
Ejemplo, aquí:
http://aprendiendojava.blogspot.com/...nstanceof.html
Con eso... harías un cast del elemento correspondiente
if (isPeon(listaPiezas.get(0)) {
Peon miPeon = (Peon) listaPiezas.get(0);
} // Pero habría que comprobar todos los tipos de piezas posibles :D