Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Duas duvidas sobre o curso inteiro

Dois pontos que não ficaram muito claro foram:

Na aula 11:

1- O porque da sobrescrita dos métodos hashCode e equals, se não alteramos nada no método, e eles são automaticamente herdados da classe Object().

2- Os métodos getQuantidade: Eu entendendo que dois métodos com nomes iguais é sobrecarga, porem, como ele(o programa) sabe qual método ele esta usando?

Desde já agradeço. :)

4 respostas

Oi herdan, tudo bem?

1) Em Java, todas as classes herdam de Object que é a classe que tem a implementação padrão de hashCode e equals, então se você não sobreescrever na sua classe, esses métodos serão herdados.

2) Dois métodos com o nome igual nem sempre é sobrecarga. O programa sabe qual método chamar pelos argumentos (quando é sobrecarga) ou pelo tipo de objeto (quando é sobreescrita), ou seja, se for um objeto do tipo Object ou do tipo da sua classe que fez a sobreescrita.

– Sobrecarga: métodos com o mesmo nome, diferentes parametros e tipos de retorno, provendo a mesma operação de formas diferentes

– Sobrescrita: métodos com o mesmo nome, parametros e tipos de retorno, alterando o comportamento do método da classe pai.

Sobre a primeira duvida, mas então porque ele pede no exercício pra sobrescrever os métodos, se ele já vai herdar?

Na verdade os métodos equals e hashCode não tem implementação para o Objetct.

Quando vc adiciona, ele pergunta sobre quais atributos vc quer gerar tais métodos e depois exibe um método como proposta (em cima dos campos q vc selecionou).

Não teria como a classe Object já ter isso definido, pq ela não sabe quais atributos vc terá na sua classe e nem quais vc vai qrer usar como comparação nos métodos.

solução

Oi herdan

Se olharmos na classe Object, veremos que temos uma implementação básica e genérica equals e uma vazia de hashCode:

public native int hashCode();

public boolean equals(Object var1) {
        return this == var1;
}

Como o amigo Alexandre comentou, não teria como a classe Object saber quais são os atributos que você terá na sua classe e nem quais deles você vai querer usar como comparação em equals e hashCode, por isso é necessário fazer a sobreescrita desses métodos.