Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Chamando um método da Classe Gerente tendo estanciado o Gerente como Funcionário

public class Gerente extends Funcionario {
    public void autentica(int senha) {
        System.out.println("Metodo Autentica");
    }
}
public class TesteReferencias {
    public static void main(String[] args) {
        Funcionario g1 = new Gerente();
        ((Gerente) g1).autentica(1234); //Porque?
     }
}

Eu entendi que eu preciso estanciar o Gerente como uma var do tipo Gerente. Mas queria saber o porque do "((Gerente) g1).autentica(1234);". Esta é uma outra maneira de dizer que o g1 é uma var Gerente? Seria uma sobreposição de variável? *PS: Estou usando o IntelliJ

2 respostas
solução!

Oi Jean, tudo bem?

Como autentica() é um método que só existe em Gerente, você precisa fazer o cast de Funcionario para Gerente. Se você usar uma referência de Funcionario, mesmo que esteja referenciando um Gerente, o compilador só vai deixar você acessar os métodos de Funcionario. Para acessar os métodos de Gerente é preciso que a referência (esquerda da atribuição) também seja do tipo Gerente.

Fala, Otávio! Ah, entendi. Então a IDE fez o casting automaticamente. Acredito q isso será visto no curso, mas só a título de curiosidade, utilizar do casting é algo de boa prática?