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:
O .class é chamado de token de classe e retorna um objeto do tipo Class<?> que representa a classe pela qual você acessa o token.
mauricioadl
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.
rmendes08
Claro que pode! Se tudo o mais falhar, você pode declarar um array de Object’s :
Object[]arr;
V
vinids
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!!
rmendes08
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.
mauricioadl
Claro que pode! Se tudo o mais falhar, você pode declarar um array de Object’s :
Object [] arr;
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
rmendes08
Claro que pode! Se tudo o mais falhar, você pode declarar um array de Object’s :
Object [] arr;
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, 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.
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!!
rmendes08
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!!
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:
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.