Ho scritto questo metodo che restituisce un array di Class contenente le classi derivate di Ruota (che e' astratta) presenti nel package "ruote":

codice:
    public final static Class[] getRuote() {
        String pacchetto = Ruota.class.getPackage().getName(); // Nome pacchetto
        String path = Ruota.class.getResource(".").getFile(); // Directory della classe root
        File dir = new File(path); // Trasforma in File
        File[] classi = dir.listFiles(); // Leggi tutti i File nella directory
        ArrayList<Class> istanziabili = new ArrayList<Class>(classi.length);
        Class ruota=null;
        
        for (File f : classi) {
            String r = pacchetto + '.' + f.getName();
            try {
                ruota = Class.forName(r.replaceFirst(".class",""));
            } catch (Throwable t) {}
            if (Modifier.isAbstract(ruota.getModifiers()))
                continue;
            if (Ruota.class.isAssignableFrom(ruota)) // ruota e' assegnabile a Ruota
                istanziabili.add(ruota);
        }
        Class[] lista = new Class[istanziabili.size()];
        lista = istanziabili.toArray(lista);
        return lista;
    }
Si accettano commenti, insulti, ortaggi...

Una cosa che non mi va giu' e' il dovermi riferire esplicitamente a Ruota qui:

codice:
            if (Ruota.class.isAssignableFrom(ruota)) // ruota e' assegnabile a Ruota
In pratica manca un equivalente statico del this. Avevo letto che nella JDK 1.5 sarebbe stato reso statico lo stesso this, invece nisba...

Cmq, facezie a parte, ho scritto un sacco di codice inutile e c'e' un metodo piu' semplice per fare tutto cio'?