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

Estou apreendendo herança e estou seguindo a aula porem meu codigo não esta sendo valido.

Estou apreendendo herança e estou tendo um problema, estou seguindo igual a exemplo da aula, no sistema ByteBank tem a classe Funcionario e Diretor, diretor Herda Funcionario porem esta dando erro Codigo Funcionario está assim:

namespace ByteBankk.Funcionarios
{
    public class Funcionario
    {
        public string Nome { get; set; }
        public string CPF { get; set; }
        public double Salario { get; set; }

        public double GetBonificacao()
        {
            return Salario * 0.10;
        }
    }
}

E o codigo Diretor está assim:

namespace ByteBankk.Funcionarios
{
    public class Diretor : Funcionario
    {
        public double GetBonificacao()
        {
            return Salario;
        }
    }
}

E está dando o seguinte erro: Aviso CS0108 "Diretor.GetBonificacao()" oculta o membro herdado "Funcionario.GetBonificacao()". Use a nova palavra-chave se foi pretendido ocultar.

2 respostas

Bom dia!

Esse problema está acontecendo porque você está redefinindo o método GetBonificacao() na classe filha Diretor, sendo que já existe esse método na classe pai Funcionarios, sem estar EXPLICITAMENTE declarando para sobrescrever o método correspondente da classe pai.

Da forma como está o seu fonte, o método GetBonificacao() da classe Funcionarios está sendo "deixado de lado", ou nos termos do compilador, está sendo ocultada.

Para sobrescrever o método GetBonificacao(), utilize o modificador "override" da seguinte forma:

namespace ByteBankk.Funcionarios
{
    public class Diretor : Funcionario
    {
        public override double GetBonificacao() // Repare no modificador "override" entre o "public" e o "double".
        {
            return Salario;
        }
    }
}

Referência: https://docs.microsoft.com/pt-br/dotnet/csharp/language-reference/keywords/override

solução!

Bom dia! Além do override é necessário acrescentar "virtual" no método da classe pai. Este é usado exatamente para identificar que esse método pode ser sobrescrito nas classes flihas.

namespace ByteBankk.Funcionarios
{
    public class Funcionario
    {
        public string Nome { get; set; }
        public string CPF { get; set; }
        public double Salario { get; set; }

        public virtual double GetBonificacao()
        {
            return Salario * 0.10;
        }
    }
}