Estou procurando na net e não achei nada que fale sobre o desempenho da aplicação quando se usa Interfaces ou Classes Abstratas ao inves da Classe Concreta para referenciar objetos.
Um exemplo seria a utilização da Interface List ao inves da classe ArrayList, assim:
List<Pessoa> lista = new ArrayList<Pessoa>();
ao inves de
ArrayList<Pessoa> lista = new ArrayList<Pessoa>();
E também nos parametros dos métodos:
public void umMetodo(List param){}
Pra sermos mais diretos, vamos deixar a questãos de reuso, projeto, modelagem, etc e vamos focar em duas coisas: uso de memória e velocidade de execução.
Existem alguma vantagem do uso de um ou de outro? Ou dá na mesma?
Um palpite, acho que dá na mesma, pois no final das contas vc estará instanciando um objeto do mesmo tipo independente se o atributo é do tipo Interface, Classe Abstrata ou Concreta, acho que o que interessa é quando vc instancia o objeto.
Mas é bom o pessoal mais experiente ae falar do assunto.
Como já foi dito, não tem nada a ver com performance e não impacta em nada. Mas por outros motivos que você mesmo citou é altamente recomendavel usar sempre o tipo mais generico.