"Olá, amigo! Ontem você foi ensinado nas formas de classes abstratas. Agora é hora de aprofundar nosso conhecimento. Quero ensiná-lo a usar classes abstratas corretamente."

É difícil criar uma analogia do mundo real para uma classe abstrata. Uma classe geralmente é um modelo de alguma entidade. Mas uma classe abstrata contém métodos que não foram implementados e pode conter métodos que foram implementados. O que isso significa? Que analogia para uma classe abstrata podemos encontrar? Existe tal coisa no mundo real?

Na verdade, existe. Imagine o chassi de um carro quase pronto em uma esteira rolante. Posso instalar um motor turbinado ou um motor altamente eficiente. Interior em couro ou estofamento em tecido. A implementação específica do carro ainda não está determinada. Além do mais, o chassi pode ser usado para produzir várias implementações específicas. Mas ninguém quer o carro em sua forma atual. Esta é uma classe abstrata clássica : criar instâncias dela não faria sentido, então você não pode criá-las; a classe só faz sentido por causa dos muitos herdeiros de pleno direito que serão criados com base nela.

"Isso é fácil o suficiente."

Mas pode haver analogias ainda mais abstratas. Mais como interfaces com alguns métodos implementados. Por exemplo, considere um intérprete profissional . Sem especificar os idiomas de origem e destino, temos um « tradutor abstrato ». Ou considere um guarda-costas. Podemos saber que ele domina as artes marciais e pode proteger seu cliente. Mas quais artes marciais e como ele vai proteger o cliente são "detalhes de implementação" de cada guarda-costas específico.

Vejamos um exemplo:

código Java Descrição
abstract class BodyGuard
{
 abstract void applyMartialArts(Attacker attacker);

 void shoot(Attacker attacker)
 {
    gun.shoot(attacker);
 }

 void saveClientLife(Attacker attacker)
 {
  if (attacker.hasGun())
     shoot(attacker);
  else
     applyMartialArts(attacker);
 }
}
A classe BodyGuard determina como lidar com um ataque: atirar ou usar artes marciais.

No entanto, a arte marcial específica não é especificada, embora tenhamos certeza de que a habilidade existe.

Podemos criar vários guarda-costas diferentes (herdando esta classe). Todos eles poderão proteger o cliente e atirar no atacante.

"Você está certo. É muito parecido com uma interface com alguns métodos implementados."

"Sim, esse tipo de classe abstrata é comum entre as classes Java SE padrão."