Collections

olha só galera eu não entendi um trecho de linha de código do programa abaixo e gostaria que alguém me ajudasse,estou começando a ver agora na faculdade collections e realmente estou um pouco perdido…o q estiverem em vermelho é q não entendi.valeu obrigado galera !!!

class Empregado implements Comparable {
String nome;
int salario; //aqui tudo bem

public Empregado(String nome, int salario) {
this.nome = nome;
this.salario = salario;
}

public boolean equals(Object o) {
if ( o == this ) {
return true;
}
if ( o == null ) {
return false;
}
if ( getClass() != o.getClass() ) //[color=“red”]de onde vem o getClass[/color]
return false;
}
Empregado e = (Empregado) o ;
return nome.equals(e.nome) && salario == e.salario;
}

public int hashCode() {
int resultado = 17;

  resultado = 37 * resultado + nome.hashCode();
  resultado = 37 * resultado + salario;
  return resultado;

}

public int compareTo (Object o) {
Empregado e = (Empregado) o;[color=“red”]aqui ele utiliza a conversão?[/color]
return salario - e.salario;
}
}

getClass() é um metodo da classe java.lang.Object, que portanto, é herdado por todas as classes.

Veja em: http://java.sun.com/javase/6/docs/api/java/lang/Object.html#getClass()

A comparação que está sendo feita é um tanto “grosseira” na minha opinião, o ideal seria fazer isso:

if (!(o instanceof Empregado)){ return false; }

a parte “(Empregado) o” é um cast da variavel “o” de Object para Empregado, veja que o tipo da variavel “o” é Object, e portanto você precisa convertê-lo para Empregado para acessar o atributo salario.