[RESOLVIDO]Gerar um relacionamento com classe Abstrata e Interface correto

1 resposta
furacao123

Aew galera preciso desenvolver uma aplicação para ECF e estou com algumas duvidas em fazer a aplicação funcionar com varios modelos de impressora, pois cada uma usa a sua respectiva dll, pensei no seguinte...

Fazer uma interface com todos os métodos que vou precisar no ECF (só coloquei alguns no momento)
public interface ImpressoraFiscal {

    public void retornoImpressora();

    public void analisaiRetorno();

    public void leituraX();

    public void reducaoZ();

    public void abreCupom(String cpf);

    public void cancelaCupom();
    
}
Crio as classes que pra mim seriam a marca essa classe pensei em criar como Abstrata e implementando a ImpressoraFiscal
public abstract class BematechECFTEF implements ImpressoraFiscal {

    public static int iRetorno;

    public BematechECFTEF() {
    }

    public void retornoImpressora() {
        //corpo do metodo
    }

    public void analisaiRetorno() {
        //corpo do metodo
        }
    }

    public void leituraX() {
        if (JOptionPane.showConfirmDialog(null, "Deseja Emitir a Leitura X?", "Pergunta do Sistema", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
            iRetorno = Bematech.LeituraX();
            analisaiRetorno();
            retornoImpressora();
        }
    }

    public void reducaoZ() {
       //corpo do metodo
    }

    public void abreCupom(String cpf) {
        //corpo do metodo
    }

    public void cancelaCupom() {
         //corpo do metodo
        }
    }
}
E depois disso os modelos dessa marca dando extends na marca No caso esse modelo nao teve nenhuma alteração
public class Bematech2100 extends BematechECFTEF {

    public Bematech2100() {
        super();
    }

}
Ja aqui por exemplo fiz uma alteracao apenas na mensagem para simular que eu teria de dar override no metodo
public class Bematech2 extends BematechECFTEF {

    public Bematech2() {
        super();
    }

    @Override
    public void leituraX() {
        if (JOptionPane.showConfirmDialog(null, "Deseja Emitir a Leitura X (Bematech2)?", "Pergunta do Sistema", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE) == JOptionPane.YES_OPTION) {
            iRetorno = Bematech.LeituraX();
            analisaiRetorno();
            retornoImpressora();
        }
    }

}
Agora fazendo o teste percebi uma coisa
private ImpressoraFiscal impFiscal;

if (tipoImp == 0) {
            impFiscal = new Bematech2100();
        } else {
            impFiscal = new Bematech2();
        }
        impFiscal.leituraX();

ao fazer isso e chamar o metodo leituraX na instancia de Bematech2 ele não entende o metodo override e executa o metodo da classe BematechECFTEF, eu teria que fazer a verificaçao do modelo e instanciar os modelos separadamente, mas para nao fazer isso e trabalhar com o objeto de interface como eu deveria fazer?

Alguem me da alguma sugestao de como prosseguir ou se tiver uma maneira melhor ainda para fazer esse relacionamento eu agradeço :D

Obrigado.

1 Resposta

furacao123

Putz nem sei como explica a maneira como eu resolvi…

A minha linha de raciocinio esta correta (só não sei se é a melhor pratica possivel mas…) o problema estava no JComboBox safado que eu estava mudando o valor da variavel tipoImp e ele nao estava disparando o evento e sempre ia 0 e executava a primeira instancia

impFiscal = new  Bematech2100();

muito vacilo… :oops:

mas dou por resolvido…

Criado 21 de julho de 2010
Ultima resposta 21 de jul. de 2010
Respostas 1
Participantes 1