Bom dia!
Usar um metodo abstract traria o mesmo resultado que sobreescrever um metodo? Se sim, qual é o melhor de se usar?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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
Contapois 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.