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

O calc.registra(cc); não compila

O erro que mostra é o seguinte:

The method registra(Tributavel) in the type CalcularDeImposto is not applicable for the arguments (Conta).

Já que o problema está na classe conta, vou colocar o código aqui:

public abstract class Conta {
protected double saldo;
private int agencia;
private int numero;
Cliente titular;
private static int total = 0;

public Conta (int agencia, int numero) {
    Conta.total++;
    this.agencia = agencia;
    this.numero = numero;
    this.saldo = 100;
    System.out.println("Criando uma conta");
}

public void deposita (double valor) {
    this.saldo += valor;
}

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

public boolean transfere (double valor, Conta destino) {
    if(this.saca(valor)) {
        destino.deposita(valor);
        return true;
    }
    return false; 
}

Qual o problema? Desde já, Grato!

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

public int getAgencia() {
    return this.agencia;
}

public void setAgencia(int agencia) {
    if(agencia <= 0) {
        System.out.println("Não pode ser criada");
        return;
    }
    this.agencia = agencia;        
}

public double getNumero() {
    return this.numero;
}

public void setNumero(int numero) {
    if(numero <=0) {
        System.out.println("Não pode valor igual a 0");
        return;
    }
    this.numero = numero;
}

public Cliente getTitular() {
    return this.titular;
}

public void setTitular(Cliente titular) {
    this.titular = titular;
}

public static int getTotal() {
    return Conta.total;
}

}

3 respostas
solução!

Olá Lucas

Na sua classe de teste, onde tem o main, o erro está na chamada ao método registra da classe CalcularDeImposto.

Seu método registra espera um parâmetro do tipo Tributavel, porém está recebendo uma classe filha de Conta, que não implementa a interface Tributavel.

Pra que seu método possa receber essa conta que está tentando passar, é preciso que ela implemente a interface Tributavel.

Hum, acho que entendi, eu fiz o seguinte:

public abstract class Conta implements Tributavel {

//adicionei o implements Tributavel na classe conta como você sugeriu.

Ao fazer isso, a Classe ContaPoupança deu erro, porque ela também precisa implementar o método tributável, eu deixei da seguinte maneira:

public class ContaPoupanca extends Conta {

    public ContaPoupanca(int agencia, int numero) {
        super(agencia, numero);    
    }

    @Override
    public double getValorImposto() {
        // TODO Auto-generated method stub
        return 0;
    }
}

Ou seja, não mexi em nada, e deixei o retorno 0. Fiz correto? Tem alguma sugestão?

Fala Lucas,

Sua ideia está num bom caminho. Você declarou que sua classe implementa a interface Tributavel, portanto precisa dar uma implementação do getValorImporsto(), pra cumprir o contrato da interface.

Sobre a questão da implementação na classe ContaPoupanca, no método getValorImposto, vc vai implementar a sua regra de negócio. Do jeito que está, com return 0, vc está dizendo que o imposto será sempre 0. Poderia ser qualquer regra, por exemplo, o valor do imposto poderia ser 5% do saldo da conta.