Bom dia!
Usar um metodo abstract traria o mesmo resultado que sobreescrever um metodo? Se sim, qual é o melhor de se usar?
Bom dia!
Usar um metodo abstract traria o mesmo resultado que sobreescrever um metodo? Se sim, qual é o melhor de se usar?
Olá David! Tudo bem?
Quando utilizamos métodos abstratos, nós forçamos as subclasses (classes filhas) a implementarem (reescreverem) o método com a sua própria implementação.
Para ter um exemplo disso, vamos utilizar uma classe que simula uma conta bancária:
Repare que essa classe que temos é abstrata, ou seja não podemos instanciar uma Conta
, pois vamos ter duas subclasses chamadas ContaCorrente
e ContaPoupanca
que farão esse papel.
Faz sentido utilizarmos uma classe abstrata para representar a
Conta
pois num banco nós não vamos criar uma conta que não seja de um dos dois tipos... ou corrente ou poupança.
Então, repare o que acontece quando nós criamos as classes ContaCorrente
e ContaPoupanca
:
Ambas exibem erros de compilação pois agora precisamos obrigatoriamente implementar os métodos abstratos da superclasse Conta
.
Quando nós utilizamos métodos abstratos tornamos obrigatório que todas as subclasses implementem a sua versão desses métodos. Isso é útil num caso como esse que utilizamos de exemplo, pois a conta corrente possui taxas para saques, depósitos e transferências que são diferentes da conta poupança... Mas ambas precisam ter obrigatoriamente esses três métodos. Quando tornamos esses métodos abstratos na classe Conta
, obrigamos todas as suas subclasses a implementarem esses métodos, pois a superclasse não possui uma implementação que poderíamos utilizar (métodos abstratos não podem ser utilizados, da mesma forma que classes abstratas não podem ser instanciadas).
Vou deixar como recomendação de leitura a apostila da Caelum sobre Java e orientação a objetos... tenho certeza que ela vai ter conteúdos interessantes e explicações que podem te ajudar a entender melhor o assunto e muitos outros sobre a linguagem:
Apostila Caelum - Java e orientação a objetos: Métodos abstratos
A explicação foi clara? Se eu puder te ajudar em algo mais, é só falar! 😄
muito obrigado por sua explicação, entendi perfeitamente o uso de uma classe e método abstrato.