2
respostas

Classe abstrata com método não abstrato

Na classe abstrata FuncionarioAutenticavel.cs do projeto ByteBank temos o método Autenticar que contém implementação. Pois bem minha dúvida é a seguinte: qual a utilidade de um método não abstrato em uma classe abstrata visto que não podemos instanciar a classe e por conseguinte acessar esse método. Em que circunstância esse tipo de implementação seria útil? Vejo apenas na herança, pois se herdar essa classe posso acessar esse método através da instância de uma classe derivada. Seria apenas esse?

Obrigado.

2 respostas

Isso na herança mesmo a importãncia,por exemplo todas as classes(padrões do .Net e nossas criadas) herdam da classe Object e por consequência tem que implementar os métodos abstratos e pode reutilizar os métodos não abstratos,nesses métodos não abstratos temos métodos muitos importantes como ToString(),Equals(),GetType(),GetHastCode() cada um com sua funcionalidade,mas já implementados,ou seja prontos para uso.

Imagina que tu está implementando um software para banco, normalmente os bancos vão ter dois tipos de contas ContaCorrente e ContaPoupanca, essas contas vão compartilhar por exemplo um método para mostrar o saldo

public abstract class Conta
{
    private double _saldo;
    public void MostraSaldo()
    {
        Console.WriteLine("Seu saldo é " + _saldo);
    }
}

Nesse caso toda classe que herdar de conta vai ter o método MostrarSaldo disponível, agora se tu modificar o método MostrarSaldo e colocar ele como abstract todos os filhos da Classe Conta terão que implementar esse método tendo redundância de código. Analisando essa situação a classe Conta não pode ser herdada porque ela é uma classe genérica, mas define métodos que seus filhos podem usar.