Herança

2 respostas
edymrex

Bem tenho algumas dúvidas sobre herança, sempre as classes que eu devirar da principal vão ser as filhas…?? eu posso herdar atributos
private de uma classe principal…??se eu tiver um método em uma classe
principal eu posso herdar esse método para dezenas de outras classes?
se eu tiver uma classe exemplo:

Animal
                        -----------
                      + comerComida()
                      +proCriar()    
                  /                          \
  
       Galinha                           Vaca
     -----------                       - --------------
     +Carcarejar()                +Mugir()
     +porOvo()                     +comerComida()

a classe vaca está herdando a classe Animal mais ambas tem o método
comer comida ai como fica esse situação?

2 Respostas

ViniGodoy

Todas as filhas herdam os métodos da classe pai.

Métodos privados não são herdados.

Métodos com visibilidade default (ou seja, que você não declara nada), são chamados de package private. Ele só vão ser herdados por classes do mesmo pacote.

E sim, se você tiver dezenas de subclasses, esses métodos serão herdados para todas essas dezenas.

No seu exemplo, você mostrou o conceito de sobreescrita. O java sempre chamará o método comerComida() da vaca. Mesmo que você faça:

Animal animal = new Vaca();

animal.comerComida();
O método da vaca será chamado. Se você logo em seguida fizer:

animal = new Galinha();

animal.comerComida();

Então o método comer comida da classe animal será chamado. Isso  muito poder, pois você pode fazer uma subclasse implementar um método comerComida() mais apropriado para o animal em questão. O que realmente importa, no frigir dos ovos, é que comer comida realiza a mesma ação, a de comer e não exatamente como a classe faz isso.

Essa é a razão também de existirem classes abstratas. Você poderia tornar a classe animal abstrata e deixar o método comerComida abstrato. Ele ficaria sem implementação na classe animal!!! Afinal, não sabemos como um “animal genérico” come. Mas não importa, pq o que interessa é que “todo animal come comida”, e não como ele faz isso.

Nesse caso, tanto a galinha quanto a vaca seriam obrigados definir o método comerComida(). Uma subclasse não seria obrigada a declarar esse método a menos que fose abstrata também. Por exemplo, se uma filha de animal fosse Mamífero e tivesse o método abstrato mamar(), você poderia deixar para implementar comerComida() apenas na classe Cachorro, filha de mamífero. E seria obrigado a implementar também mamar().

Adriano_Almeida

Sempre as classes que derivam de alguém são filhas. Lembrando que uma filha também pode ser pai de alguém.

Não… atributos herdáveis são apenas protected e public.

Puppets:
se eu tiver um método em uma classe
principal eu posso herdar esse método para dezenas de outras classes?

Acho q não entendi mto bem o que vc quis dizer, mas, os métodos vão sendo herdados de cima para baixo na “árvore de herança” de suas classes. Porém, você em Java NÃO pode ter heranças múltiplas.

Se você está implementando o método comerComida() em Vaca, o método então está sendo sobrescrito. Se você não estiver implementando ele em Vaca ele está apenas sendo herdado de Animal.

Qualquer duvida posta ae!

PS: Qdo criar tópicos, crie um só, por favor!

Criado 4 de janeiro de 2007
Ultima resposta 4 de jan. de 2007
Respostas 2
Participantes 3