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?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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(); //funfaIsso é 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).