"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 |
---|---|
|
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."
GO TO FULL VERSION