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

Polimorfismo

Bom dia!

Usar um metodo abstract traria o mesmo resultado que sobreescrever um metodo? Se sim, qual é o melhor de se usar?

2 respostas
solução!

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:

Classe abstrata **Conta** que será usada como exemplo na explicação. A classe possui como atributos: numero, agencia, saldo e titular. Todos os atributos da classe são privados. A classe possui três métodos abstratos: transfere, deposita e saca

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:

Imagem da IDE eclipse exibindo a classe **ContaCorrente** com um destaque em vermelho para o nome da classe, indicando que estamos analisando ela na imagem. Abaixo do nome da classe temos um aviso de erro de compilação da IDE a nossa esquerda, que ao ser clicado exibe três linhas demonstrando os erros presentes nessa classe. Os erros possuem um destaque em vermelho ao seu final, mostrando que é necessário implementar os três métodos abstratos da superclasse

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! 😄

 

 

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!

muito obrigado por sua explicação, entendi perfeitamente o uso de uma classe e método abstrato.