Polimorfismo [RESOLVIDO]

Olá Pessoal,
Eu não estou lembrando aqui como usar
o polimorfismo, será que alguém pode me dar
uma ajuda?

//Reconhece apenas os métodos da análise
Analise analise = new ExtratoSeco();
Analise analise = new ExtratoSeco();
//REconhece os métodos do Extrato Seco (Faz o que eu preciso)
ExtratoSeco extSec = (ExtratoSeco) analise;

Como que eu devo fazer mesmo para não
precisar criar 2 variáveis de referência?
Será que alguém pode me dar uma ajuda?

[]'s.

Ué, faz assim:

ExtratoSeco extSec = new ExtratoSeco(); 

O polimorfismo você já estava usando antes, quando instância através da interface. Se você quer um método específico da implementação e não da interface, então você terá que usar a implementação mesmo.

instanciando interface? Nao tem como instanciar interface n… O caso é polimorfismo quando vc tem Sobrecarga em tempo de execução ele procura o tipo especifico da variavel entao ele procura pelo Supertipo…e quando vc tem uma sobreescrita de método ele procura primeiro no Subtipo mesmo sua variavel sendo do tipo do “Supertipo”.

[quote=ricardocomp]Olá Pessoal,
Eu não estou lembrando aqui como usar
o polimorfismo, será que alguém pode me dar
uma ajuda?

//Reconhece apenas os métodos da análise
Analise analise = new ExtratoSeco();

[/quote]

Isso só acontece se os métodos em ExtratoSeco estiverem sobrecarregando e não sobrescrevendo os métodos de Analise.

[quote=ricardocomp]

Analise analise = new ExtratoSeco();
//REconhece os métodos do Extrato Seco (Faz o que eu preciso)
ExtratoSeco extSec = (ExtratoSeco) analise;

Como que eu devo fazer mesmo para não
precisar criar 2 variáveis de referência?
Será que alguém pode me dar uma ajuda?

[]'s.[/quote]

ExtratoSeco extSec = new ExtratoSeco();

Olá pessoal,
a minha dúvida principal é em relação a classe Analise
que é abstrata e extrato seco extende da classe Analise.

Analise é abstrata não tem como eu instanciá-la
aí quando eu crio uma análise ExtratoSeco:

Connection conn = ConnectionFactory.getConnection();
            AmostraDao amostraDao = new AmostraDao(conn);
            TipoAnaliseDao tpAnaliseDao = new TipoAnaliseDao(conn);
            AnaliseDao analiseDao = new AnaliseDao(conn);
            
            ExtratoSeco extSec = new ExtratoSeco();
            extSec.setPesoAntes(20);
            extSec.setPesoDepois(30);
            //Seta o atributo resultado da classe Análise
            extSec.calculaExtratoSeco();
            extSec.getResultado();

            Analise analise = Qual instância eu devo usar aqui???;
            analise.setAmostra(amostraDao.procurarAmostra(3));
            analise.setTipoAnalise(tpAnaliseDao.procurarTipoAnalise(5));
            analise.setObservacao("Teste Observações");
            analise.setStatus(StatusAnalise.NOVA);
            analise.setListaTipoAnalise(null);
            
            analiseDao.salvarAnalise(analise);

Será que alguém pode me dar uma ajuda?

[]'s.

[quote=ricardocomp]Olá pessoal,
a minha dúvida principal é em relação a classe Analise
que é abstrata e extrato seco extende da classe Analise.

Analise é abstrata não tem como eu instanciá-la
aí quando eu crio uma análise ExtratoSeco:

            Analise analise = Qual instância eu devo usar aqui???;
            analise.setAmostra(amostraDao.procurarAmostra(3));
            analise.setTipoAnalise(tpAnaliseDao.procurarTipoAnalise(5));
            analise.setObservacao("Teste Observações");
            analise.setStatus(StatusAnalise.NOVA);
            analise.setListaTipoAnalise(null);
            
            analiseDao.salvarAnalise(analise);

Será que alguém pode me dar uma ajuda?

[]'s.

[/quote]

Os métodos que você quer da classe Analise são abstratos?
Se sim, eles terão que ser implementados por qualquer classe concreta (não abstract) que herde de Analise.
Como vc mesmo disse, a classe Analise não poderá ser instanciada pelo fato de ser abstract.

Se a classe Analise declara um método abstrato x, esse método deverá ser implementado por qq classe concreta que herde de Analise. Assim, quando vc fizer:

Analise analise = new ExtratoSeco() analise.x();
automaticamente você estará usando polimorfismo (à menos que o método x na classe Analise não seja abstrato (tenha sido implementado) e vc esteja usando sobrecarga no método x da classe ExtratoSeco).

Não sei se compreendi sua dúvida. Primeiro da uma olhada nesse tópico:
http://www.guj.com.br/posts/list/149374.java

Valeu pessoal
pela ajuda de todos
e pelas dicas eu acabei
chegando em algo desse
tipo:

            Connection conn = ConnectionFactory.getConnection();
            AmostraDao amostraDao = new AmostraDao(conn);
            TipoAnaliseDao tpAnaliseDao = new TipoAnaliseDao(conn);
            AnaliseDao analiseDao = new AnaliseDao(conn);

            ExtratoSeco extSec = new ExtratoSeco();
            extSec.setPesoAntes(20);
            extSec.setPesoDepois(30);
            //Seta o atributo resultado da classe Análise
            extSec.calculaExtratoSeco();
            extSec.getResultado();
           //Esses métodos abaixo são herdados de Analise
            extSec.setAmostra(amostraDao.procurarAmostra(3));
            extSec.setTipoAnalise(tpAnaliseDao.procurarTipoAnalise(5));
            extSec.setObservacao("Teste Observações");
            extSec.setStatus(StatusAnalise.NOVA);
            extSec.setListaTipoAnalise(null);                       
            analiseDao.salvarAnalise((Analise)extSec);

Era o que eu estava precisando fazer,
Obrigado mais uma vez. :smiley:

Abraço a todos.