Duvida com polimorfismo![RESOLVIDO]

7 respostas
Meth

Bom pessoas vou postar o codigo e minha duvida logo abaixo:

package rammstein;


public class Main  {

   
    public static void main(String[] args) {
    Gerente CargoGerente = new Gerente();
    FuncionarioGeral CargoTeste= new FuncionarioGeral();
    

    CargoTeste=CargoGerente;
     CargoTeste.maisuma=5;   




    }

}
package rammstein;


public class FuncionarioGeral {
    private String Nome;
    private int Idade;
    protected float Salario;

    void setIdade(int IdadeLocal){
        this.Idade=IdadeLocal;
    System.out.println("Mudou Idade!!");
    }
    void setNome (String NomeLocal){
    this.Nome=NomeLocal;
    System.out.println("Mudou Nome!!");
    }
    String getNome(){
    return this.Nome;

    }
    int getIdade(){
    return this.Idade;
    }
    
    float getPagamento(){
    this.Salario = 1000;
    return this.Salario;
    }
}
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package rammstein;


public class Gerente extends FuncionarioGeral {
   int maisuma;
    @Override
    float getPagamento(){

    return 500 + super.getPagamento();
    }

}

Porque diabos da erro se o atributo "maisuma" faz parte de Gerente e cargo teste recebe o que Gerente tem...????

7 Respostas

evertonsilvagomesjav

Simples, a classe FuncionarioGeral nao tem esse atributo maisUma, e outra polimorfismo so funciona com métodos e nao com atributos.

Meth
package rammstein;


public class Gerente extends FuncionarioGeral {
   int maisuma;
    @Override
    float getPagamento(){

    return 500 + super.getPagamento();
    }
void teste(){
 System.out.println("Funfou!!");   
}
}

Quando faco CargoTeste.teste da erro de compilacao....,polimorfismo seria entao so pra metodos Override??

[color=red]Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - not a statement
at rammstein.Main.main(Main.java:23)
Java Result: 1[/color]

Eric_Yuzo

No seu caso, devido a herança, pode-se dizer que Gerente “É UM” FuncionarioGeral, por isso é possível atribuir uma referência de Gerente à variável do tipo FuncionarioGeral. Isto já é um caso de polimorfismo.

Porém a variável CargoTeste, por ser do tipo FuncionarioGeral, só tem conhecimento dos atributos e métodos declarados na classe FuncionarioGeral. Não tem como esta variável saber quais métodos ou atributos foram adicionados nas classes filhas.

Você pode acessar todos os métodos declarados em FuncionarioGeral, independente se estão sobrescritos ou não. A diferença fica para a execução, se o método for sobrescrito em Gerente, será executada o código implementado em Gerente, caso contrário será executado da forma que foi implementada em FuncionarioGeral.

[EDIT]Como o método teste() é particular da classe Gerente, você precisaria de uma variável do tipo Gerente para poder acessá-lo.

Falou…

Meth

Deixa eu ver se entendi…
A linha:

CargoTeste=CargoGerente;

Entao CargoTeste so recebe os metodos que tem o mesmo nome no objeto CargoGerente(Sobrescritos)?

Eric_Yuzo

CargoTeste é uma variável de referência, portanto ela guarda referência, ou seja o caminho para acessar o objeto na memória (heap).

Mesmo sendo do tipo FuncionarioGeral, ela recebe a referência do objeto do tipo Gerente por causa do polimorfismo. Mas ela só sabe invocar os métodos que foram declarados em seu próprio tipo, que é FuncionárioGeral. Portanto ela pode acessar os métodos “getNome, setNome, getIdade, setIdade e getPagamento”. No caso de “getPagamento”, será executado o código de Gerente, pois ele foi sobrescrito.

A sobrescrita indica apenas que o método deve ser executado de forma diferente na subclasse.

Falou…

Meth

CargoTeste=CargoGerente;
A CargoTeste (variavel de referencia ,parecida com ponteiros…,o cara nao pode ficar a vontade um segundo? :shock: )chama os metodos “getNome, setNome, getIdade, setIdade e getPagamento” e o getPagamento sobrecrito da classe filha ,ao invez do metodo pertencente a ela,por causa do polimorfismo…acertei?
Valeu =D

Eric_Yuzo

Foi mal se fui chato. hehe

A ideia é esta.

Falou…

Criado 26 de setembro de 2010
Ultima resposta 27 de set. de 2010
Respostas 7
Participantes 3