2
respostas

Por que para de funcionar quando crio um construtor?

Tudo bem até aqui, estou gostando muito. Tenho uma duvida, por que o codigo para de funcionar quando coloco um construtor? Sem o construtor roda direitinho. Obrigado.

package erdeiro;

public class Conta {
    private String nome;
    double saldo = 0;

    // Construtor
    public Conta(String digitaNome) {
        this.nome = digitaNome;
    }

    // Metodo bonifica

    public double bonifica() {
        return this.saldo + 1;
    }

    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public double getSaldo() {
        return saldo;
    }
    public void setSaldo(double saldo) {
        this.saldo = saldo;
    }



}
Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Implicit super constructor Conta() is undefined for default constructor. Must define an explicit constructor

    at erdeiro.Gerente.<init>(Gerente.java:3)
    at erdeiro.CriaGerente.main(CriaGerente.java:5)
2 respostas

Olá Alan, boa tarde!

Quando você não define um construtor, implicitamente o java cria um construtor padrao que seria este:

public Conta() {

    }

A partir do momento vc define o construtor (e você pode ter mais de um, desde que sejam diferentes) ele passa valer.

Você não postou a parte do codigo onde faz a instancia de um novo objeto da classe Conta, mas acredito que o erro seja o seguinte:

Você definiu um construtor na classe Conta que precisa de um parâmetro "nome", então é obrigatório que você faça isso, por exemplo:

Conta cc = new Conta("Alex");

Como disse um pouco mais acima, você pode definir mais de um construtor e caso deseje que não seja obrigatório informar um nome para instaciar um novo objeto Conta, voce pode criar mais um construtor na classe Conta, da seguinte forma:

public Conta() {
    }

Espero ter ajudado de alguma forma.

Olá Welington, tudo bem? Sim com certeza ajudo. Eu achava que poderia ter um construtor na classe Conta configurado para o nome e que fosse possivel usar ele para classe Cliente e para classe Funcionario. Acho que isso não é possivel. Achei que seria possivel usar um super construtor.

// Criando construtor
    public Gerente(String digiteNome) {
        super.nome = digiteNome;
    }

Isso não funciona. Muito obrigado. Acho que funciona se mudar a visibilidade para protected.