Ajuda com herança

estou iniciando java e estou tendo dificuldade com o seguinte programa:

package conta;

public class contaSimples
{
    
    String nome;
    int conta;
    double saldo, salario, limite;
    boolean limOk;
    
    public contaSimples(String nome , int conta , double saldo ,double salario , double limite)
    {
        this.nome = nome;
        this.conta = conta;
        this.saldo = saldo;
        this.salario = salario;
        this.limite = limite;
        
        if ( this.salario > this.limite)
        {
            this.limOk = false;
        } else {
            this.limOk = true;
        }
    }
    
    public void saldo()
    {
        System.out.println("O saldo do cliente "+this.nome+"é:\nR$ "+this.saldo);
    }
    
    public void deposito(double valor)
    {
        this.saldo += valor;
    }
    
    public boolean retira(double valor)
    {
        if ( this.saldo - valor < 0)
        {
            return false;
        } else
        {
            return true;
        }
    }
}

package conta;

import conta.*;

public class contaEspecial extends contaSimples
{
    public contaEspecial(String nome , int conta , double saldo ,double salario , double limite)
    {
        //...
    }

    

}

o Netbeans fica acusando erro no construtor da contaEspecial

[quote]/home/lucas/Desktop/Conta/src/conta/contaEspecial.java:9: cannot find symbol
symbol : constructor contaSimples()
location: class conta.contaSimples[/quote]

provavlemente é um erro besta :stuck_out_tongue:

Qual é a linha 9 do seu código?

Uma possiblidade é que você declarou o construtor com parâmetros e agora o está chamando sem parâmetros.
Se sua linha 9 for:

super();

esse é o problema.

Se não for este o caso, posta aí o trecho com a linha 9.

8 public contaEspecial(String nome , int conta , double saldo ,double salario , double limite)
9 {
10 //…
11 }

a linha 9 é “{” :roll:

coloquei um super() no construtor, mas o erro persiste…

[quote]symbol : constructor contaSimples()
location: class conta.contaSimples
super();
1 error
BUILD FAILED (total time: 0 seconds)[/quote]

:frowning:

abraços

Ok.

Quando você cria uma classe sem construtor, o java cria automaticamente prá você um construtor sem parâmetros. Mas quando você implementa ao menos um construtor, o construtor “automático” (sem parâmetros) não é criado.

Quando você herda uma classe, e instancia a classe filha, na verdade você está instanciando também a classe-pai (a menos que ela seja abstrata). Ou seja, no construtor da classe-filha, se você não declarar explicitamente o construtor da classe-pai, o java automaticamente chama o construtor sem parâmetros.

Daí vem o seu erro de não existir o construtor contaSimples(). Como você declarou um construtor, o construtor sem parâmetros automático não foi criado. E como você não chamou o construtor declarado, deu pau.

SOLUÇÃO:
O construtor da super-classe deve ser o primeiro comando no construtor da classe filha.

coloque:

public contaEspecial(String nome , int conta , double saldo ,double salario , double limite)
{
  super (nome, conta, saldo, double, salario, limite);
 }

E está pronto!

package conta;
 
 import conta.*;
 
 public class contaEspecial extends contaSimples
 {
     public contaEspecial(String nome , int conta , double saldo ,double salario , double limite)
     {
         super(nome,conta,saldo,salario,limite);
     }
 
     
 
 }

pronto agora deve funcionar :slight_smile:

A regra é a seguinte:
Quando você instancia um objeto new ObjetctQualquer() no seu metodo main, o construtor deste objeto é chamado e da uma chamada a expressao super() seja ela implicita (sem declaracao propria) que no caso é sem parametro, que chama o construtor sem parametro da superclasse que consecutivamente chama a sua superclasse ate chegar na classe Object que é a superclasse de todas as classes. No seu caso tem que chamar explicitamente a expressao super(parametros) com parametros porque a sua superclasse possui um construtor com argumentos.

Espero ter ajudado…

pronto
obrigado a todos :smiley: