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

Construtor Classe ContaCorrente

Quando eu criei a classe ContaCorrente eu criei um contrutor igual ao da classe conta, só que me dava esse erro quando eu compilava a classe: C:_Diretorios\Alura\Programacao\Java\Exercicios>javac -g ContaCorrente.java ContaCorrente.java:3: error: constructor Conta in class Conta cannot be applied to given types; public ContaCorrente (String nome, int nroconta, double saldo){ ^ required: String,int,double found: no arguments reason: actual and formal argument lists differ in length 1 error;

Esse erro só sumiu quando eu criei um novo contrutor na classe Conta sem passar parâmetros e sem fazer nada, por que esse erro aconteceu?

class ContaCorrente extends Conta {

    public ContaCorrente (String nome, int nroconta, double saldo){

        this.nome     = nome;
        this.nroconta     = nroconta;
        this.saldo    = saldo;

    }// fim do contrutor

    public void atualiza(double taxa) {

        this.saldo += this.saldo * taxa * 2;
    }
}

public class Conta{

    protected String    nome;
    protected int        nroconta;
    protected double     saldo;

    public Conta(){
        };


    public Conta (String nome, int nroconta, double saldo){

        this.nome     = nome;
        this.nroconta     = nroconta;
        this.saldo    = saldo;

    }// fim do contrutor
3 respostas
solução!

Oi Alessandre, tudo bom?

Isso acontece porque nos construtores da classe filha, precisamos indicar o construtor da classe pai. Quando não indicamos o padrão que o java implementa é chamar o construtor default. Ou seja, aqui:

public ContaCorrente (String nome, int nroconta, double saldo){
        this.nome     = nome;
        this.nroconta     = nroconta;
        this.saldo    = saldo;
    }

Por baixo dos panos, temos algo como:

public ContaCorrente (String nome, int nroconta, double saldo){
        super();
    this.nome     = nome;
        this.nroconta     = nroconta;
        this.saldo    = saldo;
    }

Por isso, quando você criou o construtor sem argumentos funcionou. Se você não quiser criar esse construtor sem argumentos vamos precisar apontar para o construtor da classe pai passando os argumentos:

public ContaCorrente (String nome, int nroconta, double saldo){
       super(nome,nroconta,saldo);
    }

Repara que assim, a gente economiza o código duplicado de atribuição =)

Abraço e bons estudos.

Muito obrigado pela informação, vou usar essa dica nos meus próximos códigos.

Boa Alessandre =)

Qualquer problema é só falar.

Abraço!