Estou com uma dúvida, quando crio "Funcionario gerente = new Gerente();", eu consigo chamar os metodos overide da classe mãe, mas por exemplo o metodo senha do gerente como eu faria?
Estou com uma dúvida, quando crio "Funcionario gerente = new Gerente();", eu consigo chamar os metodos overide da classe mãe, mas por exemplo o metodo senha do gerente como eu faria?
Ola Luccas.
Ao usar poliformismo, você tem uma "penalidade": não é possível acessar nada que esteja somente na classe filha, seja metodos ou variaveis.
Para que isso seja possivel, você precisaria "transformar" o tipo da variavel, na classe filha. E isso pode ser feito com cast. Imaginando que em Gerente temos um metodo alterarSenha()
Funcionario gerente = new Gerente();
gerente.alterarSenha(); //erro de compilacao, nao alcanca
---------
Funcionario gerente = new Gerente();
Gerente g = (Gerente) gerente;
g.alterarSenha(); //funfa
Isso é a diferença entre tempo de desenvolvimento (compilação) e tempo de execução (runtime). As coisas em tempo de desenvolvimento (compilação), ou seja, ao escrever o código da IDE, você sempre leva em conta o TIPO da variável. Se o tipo for Funcionario, vc só acessa coisas dele, independente do "new" a ser dado (pois isso será feito em tempo de execução).