Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Dúvida no Eclipse, nenhum erro retornado =/

Boas,

Eu talvez esteja me perdendo um pouco no conceito da questão do exercício. Considerem isso aqui, que aparentemente o Eclipse não reclamou de erro:

abstract class Conta {
    public void saca(double valor) {
        if ((valor > 0) && (valor < this.getSaldo())) {
            this.setSaldo(this.getSaldo() - valor);
        }

        this.atualiza(1);
    }

    abstract void atualiza(double taxa);

Eu fiz isso de propósito mesmo para forçar o erro (nesse caso, nenhum erro retornado ao salvar o arquivo) no exercício. O Eclipse, ao salvar a classe, permitiu que eu chamasse o método "atualiza" de dentro do método concreto "saca", inclusive passando um valor de parâmetro.

O que eu gostaria de saber é: Qual o motivo disso ser permitido? Pois para mim isso não soa certo uma vez que o método abstrato "atualiza" sequer possui implementação.

Não cheguei a executar o projeto e o "main" da classe de teste para saber o que ia acontecer no fim das contas, mas isso para mim no mínimo é curioso.

Obrigado pela ajuda ;) Michel

2 respostas
solução!

Esse tipo de implementação pode ser utilizada como um padrão de projeto chamado "Template Method" (https://pt.wikipedia.org/wiki/Template_Method) usando Hook Method (http://pt.stackoverflow.com/questions/114777/o-que-%C3%A9-um-hook-method). Não se assuste com o nome...

É bem mais simples do que se parece..imagine que você tem dois tipos de contas ContaCorrente e ContaPoupanca essas classes herdam de Conta e você precisa aplicar, por exemplo, uma taxa quando atualiza a conta mas isso é especifico para cada tipo de conta (ContaCorrente e ContaPoupanca). Com a classe conta dessa forma e ContaCorrente e ContaPoupanca herdando de Conta, basta implementar as taxas de atualização de contas em ContaCorrente e ContaPoupanca que quando o método saca em Conta é chamado aplica a taxa.

Bom, explicação grande essa eu sei. Mas fica claro a razão de ter esse método, facilitando a manutenção do código e aplicando boas práticas.

Qualquer dúvida responda abaixo. Do contrário marque como resolvida. Abraço!

Fala Danyllo,

Obrigado pela resposta.

Então, no caso, o método "A" na class pai continua sendo abstrato, e quando o método "B" dessa classe pai chama esse método "A" abstrato, ele vai entender que deve ser o método "A" implementado na classe filha.

É isso? Valeu! :)