Implementação de interface/mvc[RESOLVIDO]

Olá pessoal estou fazendo a parte de separação de camadas aqui e surjiu a seguinte duvida.

tendo a classe:


import java.util.List;

import financeiro.util.DAOFactory;

public class UsuarioRN {
	
	private UsuarioDAO usuarioDAO;
	public UsuarioRN(){
		this.usuarioDAO = DAOFactory.criarUsuarioDAO();
	}
	
	public Usuario carregar(Integer codigo){
		return this.usuarioDAO.carregar(codigo);
	}
	
	public Usuario buscaPorLogin(String login){
		return this.usuarioDAO.buscarPorLogin(login);
	}
	
	public void salvar(Usuario usuario){
		Integer codigo = usuario.getCodigo();
		if(codigo == null || codigo == 0){
			this.usuarioDAO.salvar(usuario);
		}else{
			this.usuarioDAO.atualizar(usuario);
		}
	}
	
	public void excluir(Usuario usuario){
		this.usuarioDAO.excluir(usuario);
	}
	
	public List<Usuario> listar(){
		return this.usuarioDAO.listar();
	}

}

Ao eu criar uma propriedade usuarioDAO da intercace UsuarioDAO, essa propriedade vai vim com as classes que implementam essa interface?

no caso a classe:

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

public class UsuarioDAOHibernate implements UsuarioDAO {
	
	private Session session;

	public void setSession(Session session) {
		this.session = session;
	}

	@Override
	public void salvar(Usuario usuario) {
		this.session.save(usuario);
	}

	@Override
	public void atualizar(Usuario usuario) {
		this.session.update(usuario);
	}

	@Override
	public void excluir(Usuario usuario) {
		this.session.delete(usuario);
	}

	@Override
	public Usuario carregar(Integer codigo) {
		return (Usuario) this.session.get(Usuario.class, codigo);
	}

	@Override
	public Usuario buscarPorLogin(String login) {
		String hql = "select u from Usuario u where u.login = :login";
		Query consulta = this.session.createQuery(hql);
		consulta.setString("login", login);
		return (Usuario) consulta.uniqueResult();
	}

	@Override
	public List<Usuario> listar() {
		return this.session.createCriteria(Usuario.class).list();
	}

}

Não sei se é boa pratica ou não, mas to demorando pra acredita que funcionou =D

Não entendi o que vc quis dizer. Se a propriedade é da interface X, ela só aceita objetos de classes que implementam essa interface, e de classes derivadas destas. O seu DAO possui esta linha:

public class UsuarioDAOHibernate implements UsuarioDAO {  

Observe o implements UsuarioDAO. Isto te obriga a implementar todos os métodos dessa interface e faz com que UsuarioDAOHibernate possa ser usado em qualquer lugar que espere um UsuarioDAO (parâmetro, variável, atributo, etc.).

Era esta sua dúvida?

Sim, Obrigado.