Bom dia!
"A classe Gerente herdará a classe Funcionário porém não poderá utilizar um dos atributos nela contidos, é possível?".
Só é possível se o atributo for definido como 'private'. Aí sim , é possível.
"No exemplo do curso foi o inverso, Funcionário não conseguia utilizar o atributo "senha" que o Gerente utilizava. "
Exato, pois todo Gerente é um Funcionário, mas nem todo Funcionário é um Gerente.
Vou usar os mesmos comentários que deixei para o Aluno Felipe..
Ao criar Funcionário g1 = new Gerente( ); , sua variável 'g1' é uma classe do tipo 'Funcionário'. Por isso você só consegue acessar os métodos dessa classe. Gerente extende de Funcionário, mas a definição do tipo da variável é que vale.
Quando você cria: Gerente g1 = new Gerente( ); , sua variável 'g1' é uma classe do tipo 'Gerente' , e que extende de Funcionário. . Por isso você consegue acessar todos métodos das duas classes.
Do mesmo modo, seria se criasse: Gerente g1 = new Funcionário( ); , sua variável 'g1' é uma classe do tipo 'Gerente' , e que extende de Funcionário, e que por isso aceita uma instância de Funcionário. Mas é do tipo Gerente. Por isso você consegue acessar todos métodos das duas classes.