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

Dúvida no Ex. 5 da Aula 4 - Classes Abstratas

Exercício 5: Existe outra maneira de a classe ContaPoupanca compilar se você não reescrever o método abstrato?

Resposta: Se transformarmos a classe ContaCorrente em abstrata, ela volta a compilar, já que a responsabilidade de implementar o método é repassada para seus filhos.

A dúvida é a seguinte seria transformar a classe ContaCorrente em abstrata ou a classe ContaPoupanca, pois no meu caso fiz o que foi dito na resposta e mesmo assim a classe CP exigiu a implementação do método atualiza()?

Segue meu código:

//Classe Conta
package fj11;

public abstract class Conta {

    protected double saldo;

    public double getSaldo() {
        return this.saldo;
    }

    public boolean saca(double valor) {
        if (this.saldo >= valor) {
            this.saldo -= valor;
            return true;
        } else {
            // saldo insuficiente
            return false;
        }
    }

    public abstract void deposita(double valor);

    public abstract void atualiza(double taxa);

}


//Classe ContaCorrente
package fj11;

public class ContaCorrente extends Conta {
    @Override
    public void atualiza(double taxa) {
        this.saldo += this.saldo * taxa * 2;
    }

    @Override
    public void deposita(double valor) {

        if (valor > 0) {
            this.saldo += valor;
        }

    }

}


//Classe ContaPoupanca com o método atualiza() comentado
package fj11;

public class ContaPoupanca extends Conta {
    @Override
    public void atualiza(double taxa) {
        this.saldo += this.saldo * taxa * 3;
    }

    @Override
    public void deposita(double valor) {
        if (valor > 0) {
            this.saldo += valor - 0.10;
        }

    }

}
2 respostas
solução!

Olá Jose Roberto! No seu caso você tem que tornar as duas classes Abstratas, tanto a ContaCorrente como a ContaPoupanca. Assim, por elas serem classes Abstratas não precisa se implementar os métodos abstratos da classe Conta, mas as classes que herdarem de ContaPoupanca e de ContaCorrente e que não forem abstratas terão que implementar os métodos abstratos.

Espero ter ajudado. Bons Estudos!

Obrigado, Romário!

Eu acho que o que confundiu um pouco foi a resposta dada para o enunciado, creio que se a resposta fosse "transformarmos a classe ContaPoupanca em abstrata" ao invés de "transformarmos a classe ContaCorrente em abstrata" eu não teria ficado confuso. Se eu transformasse apenas a classe ContaPoupanca em abstrata funcionava também.

Segue abaixo o enunciado e a resposta fornecida pelo site.

Exercício 5: Existe outra maneira de a classe ContaPoupanca compilar se você não reescrever o método abstrato?

Resposta: Se transformarmos a classe ContaCorrente em abstrata, ela volta a compilar, já que a responsabilidade de implementar o método é repassada para seus filhos.