Boa tarde,
Será que alguém poderia me dizer a razão por que não consigo receber o objeto tipo Produto vindo da classe Principal para o método adiconaProduto(Produto p, int quantidade) da Classe CarrinhoDeCompras???
Agradeço muito se alguém me responder isso! 
public class Principal
{
public static void main(String[] args)
{
CarrinhoDeCompras carrinho = new CarrinhoDeCompras();
carrinho.adicionaProduto(new Produto("livro", 123, 80.00), 10);
carrinho.adicionaProduto(new Produto("caderno", 124, 5.00), 14);
carrinho.adicionaProduto(new Produto("livro", 123, 100.00), 5);
}
}
public class Produto
{
private String nome;
private int codigo;
private double preco;
public Produto(String nome, int codigo, double preco)
{
this.nome = nome;
this.codigo = codigo;
this.preco = preco;
}
public boolean equals(Object o)
{
if ((o instanceof Produto)
&& ((Produto) o).getCodigo() == this.getCodigo())
return true;
else
return false;
}
public int hashCode()
{
return this.getCodigo();
}
public String getNome()
{
return nome;
}
public void setNome(String nome)
{
this.nome = nome;
}
public int getCodigo()
{
return codigo;
}
public void setCodigo(int codigo)
{
this.codigo = codigo;
}
public double getPreco()
{
return preco;
}
public void setPreco(double preco)
{
this.preco = preco;
}
}
import java.util.HashMap;
import java.util.Map;
public class CarrinhoDeCompras
{
public Map<Produto, Integer> carrinhos = new HashMap<>();
private int contador = 0;
public void adicionaProduto(Produto p, int quantidade)
{
for (Produto prod : carrinhos.keySet())
{
if(p.equals(prod))
{
carrinhos.put(p, ++contador);
System.out.println(carrinhos.get(prod));
System.out.println("Tem!");
}
else
{
carrinhos.put(p, ++contador);
System.out.println(carrinhos.get(prod));
System.out.println("Não tem!");
}
}
}
}
Passei a manhã toda tentando descobrir isso em vão! 
Agradeço mesmo, se alguém me disser a razão do não funcionamento.