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

Função do construtor sem argumentos

Não entendi qual é a função de um construtor sem argumentos no caso de herança e também não entendi o seguinte trecho do material de estudo:

"(...)

public class Conta
{
    public int Numero { get; set; }
    // Construtor sem argumentos
    public Conta() {}

    public Conta(int numero)
    {
        this.Numero = numero;
    }
}

Na verdade, dentro do C#, sempre que construímos uma instância de ContaPoupanca, o C# sempre precisa chamar um construtor da classe Conta para fazer a inicialização da classe base. Quando não invocamos explicitamente o construtor da classe pai, o C# coloca implicitamente uma chamada para o construtor sem argumentos da classe pai:

public class ContaPoupanca : Conta
{
    // nesse código o c# chamará o construtor sem argumentos da classe Conta.
    public ContaPoupanca(int numero)
    {
        this.Numero = numero;
    }
}

Se a classe Conta não definir o construtor sem argumentos, temos um erro de compilação se não invocarmos explicitamente um construtor da classe pai."

2 respostas
solução!

Olá Tatiana, tudo bem ?

Vou começar pelo trecho da aula que você colocou:

Precisamos analisar o código, um pouco: A classe Conta criou um construtor que recebe um valor: public Conta(int numero), como o construtor foi explicitamente declarado, o sistema não irá criar um construtor vazio

Então a classe ContaPoupança que herda de Conta que não recebe parâmetros em seu construtor irá chamar o construtor da classe mãe, entretanto como vimos ele recebe um parâmetro, e teremos um erro de compilação pois nada foi passado.

E para solucionar?

Precisamos criar um construtor vazio na classe Conta, é o que chamamos de sobrecarga, isto é:

  • Caso eu crie minha classe Conta Poupança sem passar o número ele irá executar o construtor vazio
  • Caso eu crie minha classe Conta Poupança passando o número ele irá executar o construtor com parâmetros

Então voltando a sua primeira pergunta:

Não entendi qual é a função de um construtor sem argumentos no caso de herança

Ele é utilizado quando temos um construtor que recebe argumentos, entretanto esses são opcionais, em nosso caso temos a opção de criar ou não passando o número da conta, mas para que o compilador não gere problemas precisamos definir um vazio :)

Se tivéssemos uma restrição do tipo: "só podemos criar uma ContaPoupança se passarmos o número da conta", ai não iriamos precisar escrever o construtor vazio, mas seria necessário passar a informação para a classe mãe!

Compreendeu?

Abraços e Bons Estudos!

Entendi! Muito obrigada pela explicação. Abraços!