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?
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?
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
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.
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(){
}
}
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?
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?