Se eu entendi bem, com o código:
Collection<Aluno> alunos = new ArrayList<>();
eu tenho acesso a implementação de ArrayList, mas não posso acessar seus métodos mais específicos, como o get()(que é da interface List), pois alunos é do tipo Collection. Portanto o tipo de um objeto que define quais métodos eu tenho acesso, não sua implementação, correto?