Herança - Dúvida básica

Bom dia. Estou praticando o conceito de herança em Java.

Para treinar criei um programa baseado num sistema de contas bancárias. Para resumir tenho a conta Base, a conta A, conta B, conta C e conta D (apenas para simplificar).

A conta B se parece muito com a conta A.

Então eu decidi, ao invés de herdar da Base, herdar da conta A. Porém vários erros apareceram.

Aí mudei e fiz a conta B herdar da conta Base, como as outras, e funcionou.

Eu achava que a herança fosse acumulativa. Ou seja, se A herda de Base, e B herda de A, então B herda de Base automaticamente. Não era pra ser assim?

Detalhe: A conta Base é abstrata. Eu declarei dois métodos abstratos. Eu imaginei que não seria necessário implementar na conta B porque eu já havia implementado na conta A.

Sim, a herança é “cumulativa”. Se C estende de B, B estende de A e A estende de Base, então, C herda tudo o que não tem acesso restrito e pertence a Base. O que seria acesso restrito?

  • Atributos e/ou métodos marcados como private
  • Atributos e/ou métodos com modificador de acesso default, em que Base e C estejam em packages diferentes.

Toda classe concreta que estenda de uma classe abstrata será obrigada a implementar os métodos abstratos. Isso se dá por conta de um conceito chamado polimorfismo. A ideia de abstract method é, justamente, obrigar/permitir o uso de polimorfismo.

Quais? Se soubermos os erros, podemos explicar/direcionar para correção/solução.