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

Herança do construtor

Fiz um exercicio que manda criar classes filhas da classe Conta, tal como a ContaCorrente. Só que quando eu havia criado a classe Conta, por segurança, pus o setSaldo como private e o usando apenas no construtor que já recebe o saldo na criação da conta.

Ao criar uma classe que herda Conta, recebi a mensagem: "constructor Conta in class Conta cannot be applied to given types;". O que significa?

5 respostas

Fala, Lucas!

Posta as tuas classes Conta e ContaCorrente pra gente dar uma olhada...

class AtualizadorDeContas{
    private double saldoTotal;
    private double selic;

    public AtualizadorDeContas(double selic){
        this.selic=selic;

    }

    public void roda(Conta c){
        System.out.println("Saldo inicial sem imposição da Selic: "+c.getSaldo());
        c.atualiza(this.selic);
        System.out.println("Saldo após imposição da Selic: "+c.getSaldo());
        this.saldoTotal+=c.getSaldo();

    }


}

class Conta{

    public Conta(double saldo){
        this.saldo=saldo;


    }

    //protected Conta(){    }

    protected String name;
    protected double saldo;


    public void setSaldo(double num){
        this.saldo=num;

    }

    public double getSaldo(){
        return this.saldo;

    }


    public void saca(double num){
        if (num<=this.saldo){
            this.saldo-=num;
        } else{
            System.out.println("Você não tem essa grana toda");
        }
    }

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

    }

    public void atualiza(double taxa){
        this.saldo+= this.saldo*(taxa/100);

    }



}

class ContaCorrente extends Conta{

    public
    ContaCorrente(double saldo){
        this.saldo=saldo;


    }



    public void atualiza(double taxa){
        this.saldo+= this.saldo*(2*taxa);

    }


}

class ContaPoupanca extends Conta{

    public void atualiza(double taxa){
        this.saldo+= this.saldo*(3*taxa);

    }

    public void deposita(double num){
        this.saldo+=num-0.1;

    }


}

class TestaE {
    public static void main(String[] args){



    }


}

entendi que devo fazer o seguinte, segundo uma menina que postou aqui no forum mesmo:

public ContaCorrente(double saldo){
        super (saldo);


    }

Mas confesso que não entendo a lógica desse super. Tá meio confuso na instrução do curso em em nenhum exercício usa esse super

O super significa que você está invocando o Construtor da classe pai. No caso, a Classe pai seria a classe Conta e a classe filha a ContaCorrente

Ao executar o Construtor da classe Conta que passa como parâmetro o valor do saldo , você está inicializando o atributo saldo.

    public Conta(double saldo){
        this.saldo=saldo;
    }

Ou seja o construtor da classe ContaCorrente também inicializara o saldo, pois ele invocara o Construtor da classe pai

public ContaCorrente(double saldo){
        super (saldo);
    }
solução!

O super é uma forma de acessar os construtores e demais métodos da classe mãe. No seu caso, ContaCorrente usa para acessar o construtor da classe Conta.

A sua classe ContaCorrente herda os métodos da classe Conta, para que você não precise reescrevê-los (essa é uma das vantagens da herança).

Assim, quando você faz:

public ContaCorrente(double saldo) {
    super (saldo);
}

Sua classe ContaCorrente está acessando (usando) o construtor da classe Conta.

Você também poderia acessar outros métodos da classe Conta direto de sua classe ContaCorrente assim:

// esse método é da classe ContaCorrente (filha)
public metodoNaClasseContaCorrenteDobraLimite() {
    super.dobraLimite(); // mas chama o método da classe Conta (mãe) usando a palavra 'super'
}

Ficou mais claro?