Com o polimorfismo, é possível "driblar" as restrições do unmodifiablelist, como por exemplo no código abaixo (similar ao "sort" visto na aula):
List<Aula> aulas = new ArrayList<Aula>(aulasImutaveis);
aulas.add(new Aula("Testando truques", 22));
Sendo assim, o que o unmodifiable limita os métodos, mas é possível flexibilizá-los novamente através do polimorfismo, forçando a criação de um objeto de classe mais genérica.
Qual a real vantagem do unmodifiable, então?
E como esse uso de polimorfismo aparece em projetos reais?