Herança no Java [RESOLVIDO]

Olá pessoal,

Eu estou desenvolvendo um sistema universitário e usando HERANÇA

public class Usuario implements Serializable{ ... }
public class Aluno extends Usuario implements Serializable { ... }
public class Professor extends Usuario implements Serializable { ... }
public class Admin extends Usuario implements Serializable{ ... }

Porém estou em dúvida de onde implementar os métodos equals e hashcode,
no meu caso eu só implementei na classe pai está correto fazer dessa forma?
Ou o correto seria fazer o inverso eu implementa-los em todas as classes filhas e retira-los da classe pai?
Ou ainda implementa-los na classe pai e em todas as sub-classes?

[]'s.

voce pode implementar na classe pai, e quando voce herdar voce fazer um override no metodo

Falaaa lineofgol, tudo jóia?

Eu estava querendo saber se tem necessidade de implementar o equals e o hashcode nas sub classes?

Pensando diferente então se eu tiver, por exemplo, uma super classe Animal e duas sub-classes Gato e Cachorro, por exemplo,
os métodos equals e hashcode vão ser herdado, acho q nesse caso ñ há necessidade de implementar os métodos equals e hashcode
nas sub-classes, mas vc ou alguém saberia me dar um exemplo de qdo eu teria q fazer o override dos métodos equals e hashcode por exemplo?

[]'s.

[quote=ricardocomp]Falaaa lineofgol, tudo jóia?

Eu estava querendo saber se tem necessidade de implementar o equals e o hashcode nas sub classes?

Pensando diferente então se eu tiver, por exemplo, uma super classe Animal e duas sub-classes Gato e Cachorro, por exemplo,
os métodos equals e hashcode vão ser herdado, acho q nesse caso ñ há necessidade de implementar os métodos equals e hashcode
nas sub-classes, mas vc ou alguém saberia me dar um exemplo de qdo eu teria q fazer o override dos métodos equals e hashcode por exemplo?

[]'s.[/quote]

Simples, quando tu quer “customizar” o seu equals.
Imagine uma classe Cliente que contenha um atributo ID. Você quer que o equals() lhe retorne true simplesmente se os id´s forem iguais, caso contrário, false. Dessa forma, você sobrescreve ambos na sua classe Cliente.

Obviamente, lhe dei um exemplo superficial, mas é para ter uma idéia :slight_smile:

Falaaa nel,

pensando na herança eu poderia ter uma super classe Loja com a sub-classe Cliente e implementaria o equals em loja
comparando com o ID como no seu exemplo aí Cliente herdaria o equal e ñ precisaria implementar o equals em cliente.

Não consigo enxergar a utlidade de implementar o equal e hashcode nas sub-classes.

[]'s.

a primeira pergunta vc vai utilizar o equals e hashcode, no seu codigo?

se sim vc implementa, senão nao ha necessidade.

tenho uma classe pai que tem metodos e atributos tipo assim

//classe Pai - Classe Generalizada
    public class Pai{
        private String nome;
        
        public String testando(){
            return "teste";
        }
    }
    //Classe Filho Herda todos os atributos e metodos do Pai e ainda vc pode incluir mais metodos e mais atributos
    //Classe Especifica
    public class Filho implements Pai{
        private int idade;
        
        public int testeIdade(){
        }
    }

[quote=ricardocomp]Falaaa nel,

pensando na herança eu poderia ter uma super classe Loja com a sub-classe Cliente e implementaria o equals em loja
comparando com o ID como no seu exemplo aí Cliente herdaria o equal e ñ precisaria implementar o equals em cliente.

Não consigo enxergar a utlidade de implementar o equal e hashcode nas sub-classes.

[]'s.[/quote]

Se você fizer um equals() que é do próprio Object, ele não fará esse tipo de comparação.
A comparação com o ID que citei deve-se ao fato de uma necessidade sua.

Se você sobrescreve o equals() se faz necessário o mesmo no hashCode().
A idéia é parecida com a do Comparator. Se você tem uma lista de Integer, você da um Collections.sort() na sua lista e ele faz isso para você.

Se você tem o objeto Cliente por exemplo e quer organizar a lista de uma forma especifica, você precisa criar uma classe que implemente o comparator.
Sobrescrever ou não o equals() vai da sua necessidade, simples assim. Exemplo, você vai implementar o Comparator se a ordem da lista não te interessa? Não faz diferença? Não.

Você vai sobrescrever o equals() e o hashCode() se em nenhum ponto do teu sistema tu faz algo como cliente.equals(outroCliente)? Não.
Entende? :slight_smile:

Consegui entender :smiley:

MUITO OBRIGADO nel e lineofgol pela ajuda de vc’s.

Um Forte Abraço.

[quote=ricardocomp]Olá pessoal,

Eu estou desenvolvendo um sistema universitário e usando HERANÇA

public class Usuario implements Serializable{ ... }
public class Aluno extends Usuario implements Serializable { ... }
public class Professor extends Usuario implements Serializable { ... }
public class Admin extends Usuario implements Serializable{ ... }

Porém estou em dúvida de onde implementar os métodos equals e hashcode,
no meu caso eu só implementei na classe pai está correto fazer dessa forma?
Ou o correto seria fazer o inverso eu implementa-los em todas as classes filhas e retira-los da classe pai?
Ou ainda implementa-los na classe pai e em todas as sub-classes?

[]'s.[/quote]