Desculpe se não fui claro no tópico, mas tentarei ser o mais claro e objetivo na minha dúvida.
Eu tenho por costume, ao utilizar determinadas classes, de usar a interface e instanciar uma determinada classe que a implemente.
Exemplos:
List<String> stringList = new ArrayList<String>();
Map<Integer, String> mapList = new HashMap<Integer, String>();
Bom, foram apenas dois exemplos. Para os mesmos, gostaria de saber se existe diferença técnica, de desempenho, qualidade de código, enfim, para o código abaixo:
ArrayList<String> stringList = new ArrayList<String>();
HashMap<Integer, String> mapList = new HashMap<Integer, String>();
Veja, aqui declaro a própria classe e não sua respectiva interface.
É isso, espero ter sido claro.
Edit: eu sei que você pode implementar uma interface e adicionar mais métodos a classe que implementa a interface, por exemplo. Sobre isso estou bem esclarecido.
Grato pela resposta.
Em outras palavras, o modo como utilizo (interface = instancia de uma determinada implementação) seria o mais adequado que o segundo exemplo (classe - classe) ?
É o mais adequado sim, pois reduz o acoplamento. Todo seu código fica dependente da funcionalidade (List) e não da implementação específica (ArrayList/LinkedList).
Leia esse tópico, onde explico detalhadamente o porque:
Esses dois caras são implementados através do padrão de projeto proxy.
É o uso de interfaces assim que também torna possível a implementação efetiva de padrões como o Decorator:
No fundo, eles retornam outras classes, que simplesmente fazem chamadas a sua lista de verdade, adicionando uma pequena funcionalidade, ou restringindo acesso.
Eu estou no caminho correto então. Fui questionado sobre isso mas não dei uma resposta convicente, como sei que o GUJ possui pessoas com mais experiência, resolvi postar e trocar uma idéia.
Tenho uma grande preocupação em utilizar ao máximo OO e usufruir da melhor forma possível do que o Java oferece, por isso o questionamento.
Creio que isso virá ao longo dos anos, não cheguei a completar 3 anos ainda no Java, portanto, digo que estou apenas engatinhando nessa longa estrada.
De qualquer forma, muito obrigado pela explicação!
Abraços!