4
respostas

Uma dúvida sobre construtores padrões.

No projeto dos Funcionários: Segui todos os passos do professor mas, tomei a liberdade de colocar mais um atributo na classe Funcionarios, que seria o private static int total. Ele conta os funcionários sempre que referencio uma nova instancia, e ele faz isso dentro de um construtor.

public class Funcionario {
    private String name;
    private String cpf;
    private double salario;
    private static int total;

    public Funcionario(){
        Funcionario.total++;
        System.out.println("Quantidade de funcionários no total: "+ Funcionario.total);
    }
}

Segui instanciando novos tipos, herdando de funcionários, e tudo compilou normalmente. Mas no projeto das contas corrente e poupança, isso não aconteceu: A classe mãe Conta, tinha um construtor especifico e quando eu fui instanciar a conta poupança e a conta corrente não compilou, pois eu deveria criar um construtor pra eles trazendo as referencias específicas do construtor da classe mãe Conta; e isso não foi preciso no exemplo anterior.

public class Conta {

    private double saldo; 
    private int agencia;
    private int numero;
    private Cliente titular; 
    private static int total; 

    // Construtor especifico
    public Conta(int agencia, int numero){ 
        Conta.total++; 
        if(agencia>0 && numero > 0){
            this.agencia = agencia; 
            this.numero = numero;
            System.out.println("Conta aberta com sucesso!");
            System.out.println("Agencia: "+ agencia);
            System.out.println("Conta: "+ numero);
        }else
            System.out.println("Agencia e conta prcisão ter valores válidos");
            return;

    }

}    

`

//new ContaCorrente
public class ContaCorrente extends Conta{

//construtor
public ContaCorrente(int agencia, int numero){
    super(agencia, numero);//chamada do construtor da classe mãe.
}

} `

Qual a diferença dos dois construtores? Será que o construtor da classe Funcionários é considerado como padrão, já que não recebe parâmetros? Espero que tenham entendido :);

4 respostas

Nathalia boa tarde!

Fiz o teste aqui, "Na minha maquina funcionou", brincadeira a parte, a única diferença que eu vi é que nas contas você não tá chamando o total junto com o construtor.

Você tentou rodar um "getTotal" em algum momento?

    public static int getTotalDeContas() {
        return ContaBancaria.totalDeContas;
    }

Acho que vc não entendeu, o meu código ta funcionando, a dúvida é só a seguinte: o construtor da classe Funcionários é considerado como padrão, já que não recebe parâmetros?

Eu não precisei criar construtores específicos para os filhos de funcionários para funcionar. Na parte da Conta, eu precisei criar construtores específicos nos filhos para ele contar o total. enfim... rsrs

O construtor padrão é o que está sendo implementado pelo compilador quando você não declara nenhum construtor. Se você criou um construtor, ele não é mais padrão, mas você pode simular um.

O construtor padrão existe em todas as classes que você criar com atributos, contudo se você criar algum construtor específico como esse da conta por exemplo que é:

public Conta(int agencia, int numero) {
        Conta.total++;
        System.out.println("O total de contas é " + Conta.total);
        this.agencia = agencia;
        this.numero = numero;
        this.saldo = 100;
        System.out.println("Estou criando uma conta " + this.numero);
    }

O parâmetros "(int agencia, int numero)" desse construtor, faz com que o construtor padrão deixe de existir, a não ser que vc coloque novamente junto com esse específico, o construtor padrão como abaixo:

public Conta() {
    }

Se vc olhar os atributos do construtor padrão além de agência e numero há também, saldo, titular e total, no primeiro Construtor você obriga na hora de criar um objeto do tipo Conta de que seja colocada a agência e o número da, mesma, mas os outros atributos não, com o Construtor padrão você pode colocar na hora da criação de uma nova Conta ou não. Espero ter sido claro e ajudado!