No caso das collections a vantagem de se trabalhar com o supertipo é mais clara. Por exemplo, no caso das listas, você tem o ArrayList e o LinkedList além de wrappers para sincronização e imutabilidade de suas próprias listas. É muito fácil trocar de implementação, mesmo no meio do projeto, pois embora as implementações sejam diferentes o comportamento das coleções entre si não varia. Este tópico explica isso com mais detalhes.
Embora essa seja realmente uma boa dica, não vejo grandes vantagens para o caso dos calendários. Eu particularmente faço isso, mas só porque GregorianCalendar não me dá nenhum método adicional mais facilitado.
Eu citaria algumas razões:
- Embora o tempo seja igual para todo mundo, a forma que se trabalha com um calendário é muito diferente. Ou seja, muito provavelmente um código feito para um calendário gregoriano não funcionará para o calendário japonês, e vice-versa;
- Acredito que em 90% dos casos, não há interesse de suportar outro tipo de calendário e é preferível ter uma implementação clara do que algo genérico e muito mais confuso.
Na minha opinião, seria realmente interessante que a Sun disponibilizasse algo mais fácil para o GregorianCalendar, e não nos forçasse a trabalhar de forma genérica, a menos que isso fosse um requisito explícito do projeto. Métodos para determinar dias úteis ou mesmo getters mais agradáveis seriam bastante práticos, aumentariam a legibilidade do código e o tornariam menos sujeito a erros.
O negócio é ficar torcendo para a JSR-310 ser logo aprovada e colocada no SDK. E enquanto isso, ir usando alternativas de terceiros, como a JODA.
Se quiserem mais uma ampla discussão sobre o calendar, podem também dar uma olhada no meu post coisas que odeio em java.