A rigor, seu problema é um pouco mais chato que parece.
Por exemplo, C2 e C3 não são uma subclasse um do outro, então não são diretamente comparáveis. No caso acima eu simplesmente, para simplificar, comparei os nomes das classes.
turim
Na verdade, eu teria que levar em conta a composição também, no caso de um Estado compor uma Cidade. Mas a herança também seria um fator.
E
entanglement
Você quer fazer um diagrama de classes então, certo? Para começar, não dá para fazer uma ordenação porque nesse caso você não tem algo linear, e sim em forma de um diagrama (nem de uma árvore é possível, uma vez que você tem composição, não somente herança).
Curiosidade: o nome desse software é uma forma distorcida de dizer “amanhã” (ashita) em japonês. Outra forma de dizer amanhã (e que aparece em alguns nomes próprios) é “asu” - como o nome desta personagem, Asuna Kagurazaka: http://pt.wikipedia.org/wiki/Asuna_Kagurazaka
É que a companhia que produz esse software é japonesa.
turim
Na verdade, quero simplesmente ordenar um List, de acordo com as dependencias.
E
entanglement
Você pode criar uma árvore com as relações de herança e depois percorrer essa árvore (use "breadth-first tree traversal - http://en.wikipedia.org/wiki/Tree_traversal - não sei como é que se diz isso em português), pondo os elementos em uma lista. É mais confiável que a solução que lhe passei (e que tem problemas se duas classes não são subclasses uma da outra).
turim
Entao, estou procurando alguma implementação de Comparable que verifique as dependências e ordene. Usando o método Collections.sort().
E
entanglement
Você pode usar a implementação que lhe passei e que checa apenas a dependência de herança. Quanto à dependência de composição, você deve concordar que a relação não pode ser posta como uma árvore e sim como um grafo, portanto não dá para ordenar do jeito que você quer. OK?