Polimorfismo -

Se foi criado “gerente” com a classe Gerente, por que criar depois “Funcionario funcionario = gerente”?

Essa última criação altera “gerente”?

O que acontece com “funcionário”?

Gerente é herdeiro de Funcionário.

Esse exemplo está na página 90 da apostila de java da Caelum.

class Funcionario {
...
}
...
class Gerente extends Funcionario {
...
}
Gerente gerente = new Gerente();
Funcionario funcionario = gerente;
...

É que você pode por ter varias classes que herdam funcionário como por exemplo

class Funcionario{
...
}

class Gerente extends Funcionario{
...
}

class Peao extends Funcionario{
..
}

e vc pode ter um método que recebe Funcionario fazendo isso você fica habilitado para chamar esse método com os filhos de Funcionario
um exemplo básico é se vc quer que o método imprima o nome de todos os funcionarios que vc tem … vc não precisa saber qual o cargo dele vc simplismente imprime o nome …

public void imprimeNomes(Funcionario func){
          system.out.println(func.getNome());
}

e a chamada pode ser

Gerente g = new Gerente();
Peao p = new Peao();
imprimeNomes(g);
imprimeNomes(p);

espero ter explicado bem :stuck_out_tongue: ( obs.: Meu primeiro post )

vi uma discuçao igual a essa, com muitas explicações e exemplos faz 2 dias :frowning:

[quote=kritiuns]É que você pode por ter varias classes que herdam funcionário como por exemplo

class Funcionario{
...
}

class Gerente extends Funcionario{
...
}

class Peao extends Funcionario{
..
}

e vc pode ter um método que recebe Funcionario fazendo isso você fica habilitado para chamar esse método com os filhos de Funcionario
um exemplo básico é se vc quer que o método imprima o nome de todos os funcionarios que vc tem … vc não precisa saber qual o cargo dele vc simplismente imprime o nome …

public void imprimeNomes(Funcionario func){
          system.out.println(func.getNome());
}

e a chamada pode ser

Gerente g = new Gerente();
Peao p = new Peao();
imprimeNomes(g);
imprimeNomes(p);

espero ter explicado bem :stuck_out_tongue: ( obs.: Meu primeiro post )[/quote]

Obrigado pela resposta!
Entendi o que vc quis dizer.
Mas ainda estou sem entender esta parte:

“Funcionario funcionario = gerente”

Só um detalhe:
A Classe Funcionario tem menos atributos que a Gerente. (não coloquei os atributos)

Mas a Classe Gerente é herdeira de Funcionario. Porem forma acrescentados alguns atributos em Gerente.

Fazendo isso:
Funcionario funcionario = gerente

funcionario só vai receber os atributos que são comum a Gerente e a Funcionario?

Só para exemplificar:

class Funcionario {
int nome;
int cpf;

class Gerente extends Funcionario {
int numerodefuncionario;
int senha.

Como foi feito

Gerente gerente = new Gerente();

e

Funcionario funcionario = gerente;

Eu queria saber se funcionario vai receber todos os atributos de gerente (nome, cpf, numerodefuncionario e senha) ou apenas os que são comuns entre Gerente e Funcionario, ou seja, nome e cpf.

Obrigado

Isso mesmo brow … vc só vai ter os atributos e métodos da classe pai…

isso é utilizado para usar métodos que são herdados do pai por exemplo

Funcionario{
    imprimeNome(){
         system.out.println("EU SOU UM FUNCIONARIO GENERICO " +getName());
    }
}


Gerente{
    imprimeNome(){
         system.out.println("EU SOU UM Gerente " +getName());
    }
}

no seu caso quando vc passa uma instancia de um filho pra um pai quando chama o método que é herdado ele vai printar “EU SOU UM Gerente nome”
mais vc não tera acesso aos atributos nem métodos que foram adicionados a mais na classe Gerente

Abraço!!