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

Fui Obrigado a Declarar Construtor em ContaCorrente:

Olá! Estou com uma dúvida, meu código está funcionando normal, meu código não estava compilando porque ele estava exigindo que eu adicionasse o método construtor:

public Conta(String nome, String agencia) {
        this.nome = nome; 
        this.agencia = agencia; 
    }

da classe Conta em ContaCorrente, porque essa obrigatoriedade se eu, ao meu ver, não fiz essa exigência quando o construi em Conta?

Segue os códigos de Conta, ContaCorrente, Tributavel, SeguroDeVida e TestaTributavel:

public class Conta {

    protected String nome;
    public String getNome() { 
        return nome;
    }
protected String agencia; 

    public String getAgencia() { 
        return agencia;
    }
protected double saldo; 

    public double getSaldo() {
        return saldo;
    }

    protected double deposito; 

    public double getDeposito() { 
    }

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

    protected double saque; 

    public double guardaSaque; 

    public void setSaque(double valor) { 
        if (valor <= saldo) {
            this.saldo -= valor;
            this.guardaSaque = valor; 
        } else {
            this.guardaSaque = valor;
        }
    }

    public Conta(String nome, String agencia) {
        this.nome = nome; 
        this.agencia = agencia; 
    }
class ContaCorrente extends Conta implements Tributavel {

    public ContaCorrente(String nome, String agencia) {                                        
        super(nome, agencia);
    }

    @Override
    public double calculaTributos() {
        return this.getSaldo() * 0.01;                                 
    }
}
public interface Tributavel { 
    double calculaTributos();  
}
class SeguroDeVida implements Tributavel {
    public double calculaTributos() { 
    }
}
class TestaTributavel {

    public static void main(String[] args) {
        ContaCorrente cc1 = new ContaCorrente("Pablo", "abc123");
        cc1.setDeposito(100);
        System.out.println(cc1.calculaTributos());
        Tributavel t = cc1;
        System.out.println(t.calculaTributos());
    }
}
4 respostas

Ele funciona quando adiciono o método em ContaCorrente, porém se o retirar já não funcionar mais.

solução!

Olá Pablo,

isso acontece devido à linha

ContaCorrente cc1 = new ContaCorrente("Pablo", "abc123"); no seu TestaTributavel.

Aqui você está usando um construtor de ContaCorrente com duas strings. Para resolver a compilação você tem duas opções: ou você implementa o construtor como sugerido, ou altera a construção para algo do tipo ContaCorrente cc1 = new ContaCorrente();

Boa tarde Alessandro!

Continuar com o código desta forma pode me causar algum problema?

Nenhum problema. O único efeito colateral é que você não poderá criar uma new ContaCorrente() pois o construtor padrão é substituído pelo que você escreveu.