| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/07/2010 18:46:02
|
java
JavaBaby
![[Avatar]](/images/avatar/fa636c3d216834a2e0db24cc157ab5f0.jpg)
Membro desde: 17/08/2005 10:13:31
Mensagens: 94
Offline
|
Bom dia amigos, cá estou eu estudando OO, cheguei nesse assunto, herança múltipla, o autor cita que o C++ suporta herança múltipla, e no caso de atributos em conflito de nomes ele (o c++) tem uma rotina para isso...
O autor disse que no java não existe herança multipla, falaram que eles contornaram esse problema com as INTERFACES.
Alguém poderia me explicar como INTERFACE no java resolve o problema de herança multipla???
Se possível postar um exemplo... agradeço!
|
"Nada é absoluto, tudo é relativo." |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/07/2010 18:54:47
|
arthurgermano
What is classpath?
Membro desde: 21/07/2010 17:47:10
Mensagens: 9
Localização: Guarapuava/Curitiba/Florianópolis
Offline
|
olá brother..
isso mesmo java suporta somente herança simples ou seja só pode herdar de uma classe, porém pode implementar diversas interfaces.
Interface é um contrato, onde o sua classe se compromete em IMPLEMENTAR TODOS os métodos descritos na interface.
Exemplo de interface
Exemplo de uma classe que implementa interface
Agora o exemplo de utilização realmente. A força está no polimorfismo note neste exemplo:
Agora você pode passar qualquer classe "por parametro" que implemente ExemploInterface que o método "metodoPolimorfico" irá funcionar corretamente!
Espero ter ajudado.
This message was edited 1 time. Last update was at 21/07/2010 18:57:18
|
Arthur J. Germano |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/07/2010 18:57:55
|
KaosBr
Java Ninja
![[Avatar]](/images/avatar/4700e3e6a3d48a48f42962abf5e56d04.jpg)
Membro desde: 26/05/2010 18:06:58
Mensagens: 255
Localização: São Carlos
Offline
|
Boa tarde,
Segue abaixo um link, do próprio, GUJ:
http://www.guj.com.br/article.show.logic?id=123
Conforme você vai poder constatar, através do link acima, há uma grande diferença entre interface e herança. Porém se a herança for aplicada de forma organizada, mesmo sem herança multipla, vai ser possivel reaproveitar muito código.
Ex:
Classe SerVivo, tem o metodo, respiração.
Classe Animal, herda respiração da SerVivo.
Classe Cachorro, herda animal e consequentemente SerVivo.
[]s
|
Anderson Fios
Técnico em Informática
http://afconsultoriaeservicos.blogspot.com/ |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 21/07/2010 19:51:31
|
Alexandre Gazola
JavaTeenager
![[Avatar]](/images/avatar/07845cd9aefa6cde3f8926d25138a3a2.jpg)
Membro desde: 23/07/2004 14:48:23
Mensagens: 176
Localização: Rio de Janeiro
Offline
|
Isso é a questão de "heranca de interface" e "heranca de implementacao". Java favorece a boa pratica de "heranca de interface" (implements), permitindo a uma classe "herdar" diversas interfaces. Heranca de implementacao (extends), devido a suas varias desvantagens, foi restringida.
abracos
|
Alexandre Gazola
Blog: http://alexandregazola.wordpress.com
"Que proveito tem o homem ganhar o mundo inteiro e perder a sua alma?" (Mc. 8:36)
"Buscai, em primeiro lugar, o Reino de Deus e a sua justiça, e todas essas coisas vos serão dadas por acréscimo" (Mt. 6:33) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/07/2010 09:45:47
|
robertoMoraes
Debugger
![[Avatar]](/images/avatar/f86bc679078ffc70aac0f58f953c7417.jpg)
Membro desde: 09/07/2010 15:49:07
Mensagens: 69
Offline
|
como o amigo mencionol no exemplo acima em java voce so herda de uma classe porem
a classe mae pode herdar de outra e assim sucecivamente (respeitando as regras de herança claro)
|
se ajudei agradeça assim vou saber que não falei bobagem.
se falei bobagem me corrija. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/07/2010 11:08:32
|
welitonjose
JavaBaby
![[Avatar]](/images/avatar/1aa2e91b77ea85e1c8846c89ee6e874d.jpg)
Membro desde: 05/01/2010 09:42:52
Mensagens: 94
Localização: Cuiabá - MT
Offline
|
heim massa ow
posso usar varias interface em varias class
e visa e versa ???????
|
ME DESLIGANDO POR ALGUM TEMPO!!!!
Weliton Jose
"good things come in small jar files", |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/07/2010 17:46:25
|
discorpio
Virtual Machine Man
Membro desde: 06/02/2010 18:46:46
Mensagens: 547
Localização: Rio de Janeiro
Offline
|
Boa tarde a todos.
Alexandre Gazola wrote:
.....Java favorece a boa pratica de "heranca de interface" (implements), permitindo a uma classe "herdar" diversas interfaces. Heranca de implementacao (extends), ......
abracos
Pra começar, classes não herdam de interfaces, muita gente confunde isso, inclusive eu logo no ínico do meu aprendizado, por pensar que as classes herdam os métodos abstratos de uma interface, quando na verdade, conforme disse o nosso amigo Arthurgermano, as interfaces apenas estabelecem uma obrigação (implementação) dos seus métodos abstrastros como se fosse uma espécie de contrato.
Dentro de todo o paradigma de Orientação a Objeto, com classes, existe e sempre existirá a hierarquia de heranças, uma classe principal, a qual chamamos de classe mãe, é que sempre será o ponto de partida. Dentro do Delphi, a classe mãe é TObject, e no Java é Object.
Quando voce declara uma classe assim:
Implicitamente seria o mesmo que declarar
As duas declarações de classes são válidas no Java, sendo a segunda opção desnecessária.
Se as classes herdassem de Interface, esta declaração abaixo geraria erro.
Visto que isso configuraria herança múltipla o que não é permitida no Java.
Muitos desenvolvedores que são considerados Puristas de O.O. acham que a herança múltipla, que foi permitida no C++, violam as características do Polimorfismo, isto pois, voce pode criar um objeto cuja classe herda de duas classes distintas, na hora que voce quiser fazer sobrescrita ou até sobrecarga de métodos que por ventura seja os mesmos nas classes herdadas, de qual classe esta vai identificar, além é claro que sempre vai bater naquele conflito de atributos com o mesmo nome e que estejam em classes de tipo diferentes. Outro fator que viola tal condição é que voce pode tipar um objeto como tipo classe, e tentá-lo instanciar com outro tipo de classe a qual não está na sua linha de hierarquia, onde a multipla herança da mesma pode gerar conflito.
This message was edited 1 time. Last update was at 22/07/2010 17:47:23
|
O Senhor é meu Pastor e nada me faltará. (Sl. 23:01) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/07/2010 18:25:50
|
Alexandre Gazola
JavaTeenager
![[Avatar]](/images/avatar/07845cd9aefa6cde3f8926d25138a3a2.jpg)
Membro desde: 23/07/2004 14:48:23
Mensagens: 176
Localização: Rio de Janeiro
Offline
|
Pra começar, classes não herdam de interfaces
Sim, correto. Mas estou me referindo à "heranca' de interface, que é a nomenclatura usada no GoF para a implementacao de contratos.
"The Gang of Four Design Patterns book discusses at length replacing implementation inheritance (extends) with interface inheritance (implements)" (http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-toolbox.html)
abracos
|
Alexandre Gazola
Blog: http://alexandregazola.wordpress.com
"Que proveito tem o homem ganhar o mundo inteiro e perder a sua alma?" (Mc. 8:36)
"Buscai, em primeiro lugar, o Reino de Deus e a sua justiça, e todas essas coisas vos serão dadas por acréscimo" (Mt. 6:33) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/07/2010 18:41:26
|
dio.msg
JavaChild
Membro desde: 14/07/2009 10:17:22
Mensagens: 125
Offline
|
Lembro de ter estudado no livro de certificacao da Kathy B. uma comparacao entre heranca simples e multipla. A heranca multipla tem uma implicacao que eles chamam de se nao me engano "problema do diamante....". A titulo de comparacao com outras linguagens que usam heranca multipla eh uma explicacao bastante simples da razao de java nao ter heranca multipla
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/07/2010 19:31:22
|
fabiocsilva
JavaEvangelist
![[Avatar]](/images/avatar/2c75cf2681788adaca63aa95ae028b22.jpg)
Membro desde: 19/07/2006 18:53:36
Mensagens: 319
Offline
|
dio.msg wrote:Lembro de ter estudado no livro de certificacao da Kathy B. uma comparacao entre heranca simples e multipla. A heranca multipla tem uma implicacao que eles chamam de se nao me engano "problema do diamante....". A titulo de comparacao com outras linguagens que usam heranca multipla eh uma explicacao bastante simples da razao de java nao ter heranca multipla
Acho você está falando do "diamante da morte"
D não sabe o que fazer com os métodos de A(se pega a implementação orinigal, se pega de B ou C). Se não me engano, C++ pega a implementação da classe filha mais a esquerda, no caso B. Mas cada linguagem resolve esse problema a sua maneira. No caso de java que não permite herança múltipla, D só poderia estender B ou C e mesmo que houvesse um método com a mesma assinatura na outra classe, não faria diferença porque a interface só contém declaração, não definição.
Não sei se fui claro com essa sopa de letrinhas kkkkkkkkk
|
"The only place where success comes before work is in the dictionary."
_____________________
Sun Certified Java Programmer
Sun Certified Business Component Developer |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/07/2010 22:20:24
|
rmendes08
GUJ Master
![[Avatar]](/images/avatar/9ee855f3ce4dd40182183463232e2162.jpg)
Membro desde: 29/05/2008 14:09:28
Mensagens: 1616
Online
|
Alexandre Gazola wrote:
Pra começar, classes não herdam de interfaces
Sim, correto. Mas estou me referindo à "heranca' de interface, que é a nomenclatura usada no GoF para a implementacao de contratos.
"The Gang of Four Design Patterns book discusses at length replacing implementation inheritance (extends) with interface inheritance (implements)" ( http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-toolbox.html)
abracos
Só pra reforçar, o James Gosling também usa esse nomenclatura no Java, The Programming Language.
|
"A Técnica é transformada em Arte por quem a emprega"
"O futuro pertence àqueles que acreditam na beleza de seus sonhos"
Computadores Fazem Arte
http://www.uaijug.com.br
"É importante estabelecer uma estrutura de alto nível, mas isso não significa criar uma infinidade de diagramas de classes detalhados." |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/07/2010 00:45:01
|
discorpio
Virtual Machine Man
Membro desde: 06/02/2010 18:46:46
Mensagens: 547
Localização: Rio de Janeiro
Offline
|
Boa noite a todos.
fabiocsilva wrote:
D não sabe o que fazer com os métodos de A(se pega a implementação orinigal, se pega de B ou C). Se não me engano, C++ pega a implementação da classe filha mais a esquerda, no caso B. Mas cada linguagem resolve esse problema a sua maneira. No caso de java que não permite herança múltipla, D só poderia estender B ou C e mesmo que houvesse um método com a mesma assinatura na outra classe, não faria diferença porque a interface só contém declaração, não definição.
Não sei se fui claro com essa sopa de letrinhas kkkkkkkkk
Fabiocsilva, voce não só foi tão claro, como ratificou aquilo que eu disse:
Para endossar o que voce falou, vamos pegar o seu exemplo e usá-lo de forma mais concreta:
No caso acima, as classes Janela e Botao, que herdam de JPanel e JButton respectivamente, ambas herdam da Classe Comp que herdam de JComponent, como JPanel e JButton herdam de JComponent, pelo menos eles estão na mesma linha de hierarquia, contudo cabemos fazer as seguintes perguntas:
1º) O método "executeMensagem(String mens)" presente na classe MeuComponente está sobreescrevendo qual método de mesma assinatura de qual classe (Janela ou Botao)
2º) A classe Janela herda de JPanel e a classe Botao herda de JButton, se a classe MeuComponente herda de ambas, qual interface gráfica MeuComponente vai herdar para se comportar como qual componente (JPanel ou JButton) Pois ambas interfaces da Swing são totatalmente diferentes.
Outro caso de violação de Polimorfismo:
No caso acima, além de não saber qual interface gráfica vai herdar, a linha de herança está totalmente fora da hierarquia, e esta é uma das razões o porque do java não adotar herança múltipla.
Aliás, o Delphi também não adota herança múltipla, face o acima exposto, ao invés disso ambos (Delphi e Java) para suprir essa deficiência da múltipla heranç, assim como disse o nosso amigo Alexandre Gazola, adotaram o sistema de herança entre Interfaces, ou seja, a herança de Interfaces só pode ser feita entra elas mesmas, pois Interface não herda de Object, de nenhuma classe, e por isso pode haver implementação múltipla de Interface
This message was edited 3 times. Last update was at 23/07/2010 01:12:23
|
O Senhor é meu Pastor e nada me faltará. (Sl. 23:01) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/07/2010 20:27:58
|
discorpio
Virtual Machine Man
Membro desde: 06/02/2010 18:46:46
Mensagens: 547
Localização: Rio de Janeiro
Offline
|
Boa noite a todos.
Gente, cometi uma garfe nos códigos que postei e esqueci a sintaxe "void", eis o código reparado.
This message was edited 2 times. Last update was at 25/07/2010 20:29:06
|
O Senhor é meu Pastor e nada me faltará. (Sl. 23:01) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/07/2010 10:33:18
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
fabiocsilva wrote:
D não sabe o que fazer com os métodos de A(se pega a implementação orinigal, se pega de B ou C). Se não me engano, C++ pega a implementação da classe filha mais a esquerda, no caso B. Mas cada linguagem resolve esse problema a sua maneira. No caso de java que não permite herança múltipla, D só poderia estender B ou C e mesmo que houvesse um método com a mesma assinatura na outra classe, não faria diferença porque a interface só contém declaração, não definição.
Não, o C++ não faz nada implícito. Ele exige que você especifique completamente o caminho, na hora que estiver fazendo a chamada ou subscrição. E é isso que torna a programação um inferno, daí o problema.
Agora, no C++ também existe o conceito de interface. Se as superclasses só contiverem métodos virtuais puros e não contiverem atributos, não haverá problemas em fazer herança múltipla, nem com o diamante da morte. Inclusive, é uma das recomendações do Effective C++ que herança múltipla só seja feita com implementações desse tipo.
No Java, esse conceito só se tornou explícito.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
|
|