Duvida Classe.class

Ola povo!

Tentando fazer um algoritmo que me retorna-se se duas classes eram do mesmo tipo fuçando com o eclipse eu consegui fazer, mas não entendi como foi feito.
No caso tenho uma superClasse Funcionario com algumas subClasses, e em um laço com todas essas subclasses misturadas preciso saber qual é de uma determinada subClasse.
Eis o algoritmo em questão:

for (int i = 0; i < funcionarios.length; i++)
			if (funcionarios[i].getClass().equals(FuncionarioEnsinoBasico.class))
				gastoEnsinoBasico += funcionarios[i].getRendaBasica();

Oq eu não entendo é esse .class no final, qualquer luz seria de grande ajuda!!

O .class é chamado de token de classe e retorna um objeto do tipo Class<?> que representa a classe pela qual você acessa o token.

nao tem como ter um array de classes misturadas, nao eh necessario a comparacao ja que todas elas sao da mesma classe e consequentemente herdeiros do mesmo pai.

Claro que pode! Se tudo o mais falhar, você pode declarar um array de Object’s :

Object [] arr;

rmendes08
Isso quer dizer que ele retorna o tipo da classe, desculpa mas não entendi direito!!

mauricioadl
Sim são todas da superClasse Funcionario, mas quero identificar de qual subClasse cada uma pertence!!

Em Java existe uma classe chamada Class, que representa justamente informações de uma classe em tempo de execução. Para cada classe carregada no seu programa existe um objeto da classe Class com essas informações. Ele pode ser acessado tanto pelo método getClass() do objeto quanto pela constante .class, acessada pelo nome da classe.

Claro que pode! Se tudo o mais falhar, você pode declarar um array de Object’s :

Object [] arr; [/quote]

mesmo assim sera um array da classe object. o que muda sao as instancias e devera entao usar a palavra intanceof para comparar e nao == ou etquals

Claro que pode! Se tudo o mais falhar, você pode declarar um array de Object’s :

Object [] arr; [/quote]

mesmo assim sera um array da classe object. o que muda sao as instancias e devera entao usar a palavra intanceof para comparar e nao == ou etquals[/quote]

Claro que pode, vai funcionar perfeitamente. Um método sobrescrito sempre executa a versão da classe da instância, logo, o método getClass() retornará a classe real do objeto, e não o tipo da referência.

Discordo de vc rmendes08!! O tipo de REFERÊNCIA determina qual método sobrecarregado será usado em tempo de compilação e não em tempo de execução como em um teste IF. Portanto vinids, use instanceof ou o equals para testar se uma determinada classe passa no teste É-UM. Porém teste as referências e não FucnionarioEnsinoBasico.class.

Flw!!

[quote=GLEMES]Discordo de vc rmendes08!! O tipo de REFERÊNCIA determina qual método sobrecarregado será usado em tempo de compilação e não em tempo de execução como em um teste IF. Portanto vinids, use instanceof ou o equals para testar se uma determinada classe passa no teste É-UM. Porém teste as referências e não FucnionarioEnsinoBasico.class.

Flw!![/quote]

Veja bem GLEMES, acho que você não entendeu. Para você acessar um método é preciso que ele esteja declarado no tipo de referência da variável (ou expressão) e que ele seja visível (public, protected, etc.). Uma vez que o método é acessível pela referência, a versão que de fato vai executar é a versão declarada no tipo da instância referenciada. Caso fosse diferente, se você chamasse um método por um refeência cujo tipo é uma interface você receberia um erro, pois interfaces não definem implementação, sacou ? Exemplo:

interface Mostravel{
  String mostrar();
}

public void main(String args[]){
  Mostravel [] arr = { 
          new Mostravel(){public String mostrar(){return "A"},
          new Mostravel(){public String mostrar(){return "B"},
          new Mostravel(){public String mostrar(){return "C"},
          new Mostravel(){public String mostrar(){return "D"},
          new Mostravel(){public String mostrar(){return "E"},
    }

    for(Mostravel m : arr)
        Sytem.out.println(m.mostrar());
}

execute o código acima e você vai entender.

rmendes08, nós estamos falando sobre métodos sobrecarregados!! No seu exemplo não há sobrecarga de método. Em métodos sobrescritos funciona exatamente como vc disse, mas não em métodos sobrecarregados, que foi a afirmação que vc fez anteriormente.

Putz, foi mal, confundi os termos …