Olá Fabrício,

    Feliz ou infelizmente em Java NÃO EXISTE HERANÇA MÚLTIPLA e ponto. Digo
feliz ou talvez infelizmente pois já passei exatamente pelo mesmo problema
quando migrei de outra linguagem (Centura) para Java, esta é uma restrição
puramente conceitual pois a Sun acredita que herança múltipla é sinônimo de
má modelagem de classes. A ÚNICA SOLUÇÃO é remodelar suas classes para
eliminar a herança múltipla.
    De início achei esta característica do Java um absurdo, mas depois de 2
anos programando em Java e hoje certificado pela Sun digo a você
sinceramente, não há nenhuma modelagem que conceitualmente exija herança
múltipla.
    Em exemplos como o seu a melhor solução é encontrar entre as prováveis
classes pai (veículo terrestre e veículo aquático) aquela que mais se
aproxima da classe filha, e utilizá-la como pai. As carcterísticas que
pertencerem a classe que não foi escolhida como pai devem ser aproveitadas
mantendo-se uma variável membro do tipo da classe rejeitada. Esta estratégia
segue os conceitos "SER" e "TER", por exemplo:

    veículo anfíbio É um veículo aquático que TEM características de veículo
terrestre.   ou talvez
    veículo anfíbio É um veículo terrestre que TEM características de
veículo aquático

    A única coisa que não existe em Java é:

    veículo anfíbio É um veículo terrestre e também É um veículo aquático.

    Qual das duas modelagens é a mais correta vai depender das
características específicas do seu projeto. Pode ser que em um outro projeto
semelhante a escolha da modelagem correta seja diferente.
    Quanto ao uso de interfaces para simular herança múltipla, desculpem-me
as pessoas que se sentirem atingidas, mas considero isso sugestão de quem
não entende nada de OO ou não sabe qual o objetivo real das interfaces.
    Interface é o mecanismo pelo qual se permite que classes distintas
possuam extamente o mesmo método implementado de formas distintas. É com
base nesse conceito que é possível a existência de api's como JDBC e JNDI,
ou seja, os drivers de JDBC são simplesmente classes que possuem exatamente
os mesmos métodos (declarados pelas interfaces) implementados de formas
distintas, pois cada SGBD possui sua forma específica de acesso.
    Não vejo como poderia ser possível implementar herança através de
interfaces se quando se usa algo do tipo "class AAAA implements BBB, CCC" o
compilador força com que a classe AAA forneça uma implementação para cada um
dos métodos declarados nas interfaces BBB e CCC. Onde está a herança?

    Um abraço,

    Anderson M. C. de Souza

----- Original Message -----
From: "Fabricio Jailson Barth" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Friday, February 02, 2001 9:26 PM
Subject: [java-list] Heranca Multipla em Java (Novamente)


>
>   Caros colegas.
>
>   A algum tempo toquei no assunto que hoje volto a escrever novamente.
>
>   Como implementar heranca multipla em Java ??
>
>   Na ultima vez em que toquei neste assunto, colegas da lista responderam
> a questao (obrigado) dizendo que uma maneira eh utilizar interfaces.
>
>   Levando-se em consideracao a minha duvida em relacao a forma de
> implementacao de tal solucao e a eficacia da mesma, abaixo segue um
> exemplo classico de heranca multipla, o qual estou tentando implementar da
> forma mais inteligente em Java.
>
>   No arquivo (classdiagram1.gif) estah o diagrama utilizando heranca
> multipla. Eh um exemplo classico de Veiculo, VeiculoTerrestre,
> VeiculoAquatico e VeiculoAnfibio. Onde a classe Veiculo eh a super-classe.
> VeiculoTerrestre e VeiculoAquatico herdam caracteristicas da classe
> Veiculo. E a classe VeiculoAnfibio estah herdando tanto caracteristicas da
> classe VeiculoTerrestre, como VeiculoAquatico (olhe o diagrama).
>
>   Sabemos que implementar esta solucao como estah no diagrama nao eh
> possivel em Java, logo: utilizando interfaces eu desenhei outro diagrama
> (classdiagram2.gif) que deve ser equivalente ao primeiro.
>
>   As minhas perguntas sao:
>
>   1. Se uma entidade externa (outro objeto que nao esteje especificado no
> diagrama) instanciar um objeto da classe VeiculoAnfibio e invocar o metodo
> da classe Veiculo (putMarcaMotor(String)) como eu devo proceder para
> implementar tal situacao jah que a classe VeiculoAnfibio nao estah
> herdando caracteristicas da classe Veiculo, mas soh estah implementando as
> classes IVeiculoTerrestre e IVeiculoAquatico ??
>
>   1.a. Uma solucao seria instanciar a propria classe VeiculoTerrestre
dentro da
> classe VeiculoAnfibio, logo ela teria acesso a estes metodos. Mas se eu
> instanciar tanto a classe VeiculoTerrestre como a classe VeiculoAquatico
> eu terei para uma unica classe VeiculoAnfibio dois objetos da classe
> Veiculo.
>
>   2. Como eu posso implementar a sobrecarga de metodos ??
>
>   3. Os atributos que deveriam ser herdados, como ficam ?? Tenho que
> especificar na sub-classe ???????
>
>   Acho bom eu ficar por aqui. Nao sei se fui claro o bastante, mas as
> minhas duvidas ainda continuam. E realmente eu nao sei como a utilizacao
> de interfaces pode suprir a falta de heranca multipla.
>
>   OBrigado pela atencao.
>
> --------------------------------------------------------------
> Fabricio Jailson Barth
> --------------------------------------------------------------
> "Qual serah o absurdo de hoje que serah a verdade de amanha ?"
> (Alfred North Whitehead (1925))
> --------------------------------------------------------------
>


----------------------------------------------------------------------------
----


------------------------------ LISTA SOUJAVA ----------------------------
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED]
-------------------------------------------------------------------------


------------------------------ LISTA SOUJAVA ---------------------------- 
http://www.soujava.org.br  -  Sociedade de Usuários Java da Sucesu-SP 
dúvidas mais comuns: http://www.soujava.org.br/faq.htm
regras da lista: http://www.soujava.org.br/regras.htm
para sair da lista: envie email para [EMAIL PROTECTED] 
-------------------------------------------------------------------------

Responder a