| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/01/2010 21:04:21
|
Sesshoumaru
Debugger
![[Avatar]](/images/avatar/9af754b62b8cfc25e076e49930e9ea9c.jpg)
Membro desde: 02/09/2009 09:24:13
Mensagens: 66
Offline
|
Galera eu comprei o livro scjp 6 (Kathy Sierra) e no exercicio 7 do capitulo 3 tem
o seguinte codigo:
a dúvida é com relaçao ao metodo: public int getValue ( int bid ){}
pq nao da erro se ambos tem a msm assinatura?
|
SCJP 6 |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/01/2010 21:13:30
|
sobreira
Thread.start()
![[Avatar]](/images/avatar/ff6370826fc8b3361f45b8b8c3210524.jpg)
Membro desde: 25/11/2008 12:02:41
Mensagens: 26
Offline
|
Porque o primeiro método é membro do enum, enquanto o segundo é membro da classe Bridge.
|
Fabiano S. Coelho
http://blog.sobreira.eti.br |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 25/01/2010 21:35:21
|
newbcc
JavaTeenager
![[Avatar]](/images/avatar/55250fc72f7d5e4c9c9108e38b1e94ec.jpg)
Membro desde: 13/12/2007 13:07:56
Mensagens: 172
Offline
|
Olá, cara roda esse código com um exemplo mais ou menos assim:
Como o amigo aí em cima disso, o primeiro método é membro da enum declarado da forma NestedInnerClass, ou seja, aninhado. Sendo que o termo aninhado pode ser entendido como um método dentro de outro, dentro de uma enum (como é neste caso), dentro da lista de argumentos de um método.
Enfim, quando você invocar o "getValue(...)" com uma referência do Suits.TESTE você irá invocar o método que está aninhado com a declaração desse valor na Enum e pensando dessa forma, como nenhum método foi aninhado com o valor de Suits.CLUBS você irá invocar o método que faz parte (membro) da classe.
NestedInnerClass sempre estará associado com algum outro membro de uma classe, como dito antes, um outro método, na lista de argumentos de um método ou em uma Enum.
Abs.
|
"Educai as crianças, para que não seja necessário punir os adultos"
Pitágoras |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 06:26:01
|
victorwss
JWizard
![[Avatar]](/images/avatar/4ab232445f9b21b65dfdf6ea5f27f704.png)
Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline
|
Vamos ver o código:
O segundo getValue está na classe Suits (ou mais precisamente Bridge.Suits). A classe Suits é um enum, mas isso não importa para o método.
O elemento TESTE tem um corpo, pois seguem-se {}. Assim, ele vai ser de uma classe anônima especial, que será subclasse de Suits. O compilador provavelmente vai chamar essa classe anônima de Bridge$Suits$1. Ao compilar o código você vai notar que surgirá um arquivo "Bridge$Suits$1.class". TESTE não será um membro direto da classe Suits e sim dessa subclasse anônima. No entanto CLUBS não tem nada de especial, e portanto ele será um membro direto de Suits. Isso daí pode ser comprovado ao invocar-se System.out.println(Bridge.Suits.CLUBS.getClass()) e System.out.println(Bridge.Suits.TESTE.getClass()).
O primeiro getValue está no elemento TESTE, que é uma subclasse anônima de Suits. O que acontece quando você coloca na subclasse um método com a mesma assinatura da superclasse? Ocorre um override (sobrescrita de métodos). Portanto, o primeiro getValue é um override do segundo.
This message was edited 2 times. Last update was at 26/01/2010 06:30:10
|
Victor Williams Stafusa da Silva
Bacharel em Ciência da Computação - UFMT // Especialista em Desenvolvimento Java - CEFET/MT // Doutorando em Ciência da Computação - IME-USP
SCJP 6.0 - 19/12/2007 - PASS - 88% // SCWCD 5 - 17/05/2008 - PASS - 79% // SCJA - 09/09/2008 - PASS - 96% // SCSNI - 30/06/2009 - PASS - 68% // SCBCD 5 - 31/05/2010 - PASS - 95%
Próximos: SCJD (encalhado com o projeto), SCEA parte I (estudando). Algum dia desses: SCMAD, OCA, SCEA e SCDJWS.
Computação: uma ciência holística e esotérica!
E então veio Deus a terra e disse aos homens: Não dividireis por zero.
XML is a giant step in no direction at all. (Erik Naggum)
Arquitetura de sistemas: Eu prefiro ser essa metamorfose ambulante do que ter aquela velha opinião formada sobre tudo.
Diga não as drogas: Não use java.util.Vector.
Cuidado: Este usuário pode ter temperamento agressivo.
Always code as if the person who will maintain your code is a maniac serial killer that knows where you live.
I am the maniac serial killer that knows where you live who will maintain your code.
É impossível falar de CMMI (Capability Maturity Model Integration) sem saber o que é CIMM (Capability Im-Maturity Model).
Se você escreve "concerteza", "concerteza" você andou matando aulas de português. |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 08:32:39
|
pablouu
Thread.start()
![[Avatar]](/images/avatar/c8e74ee1a070396e83e9ca3f1cd868e9.jpg)
Membro desde: 27/04/2009 19:35:47
Mensagens: 46
Offline
|
eu acho que complicaram na resposta.
eu vejo de uma forma mais simples, o método getValue está sendo sobrescrito por TESTE, sendo assim, se vc chamar o método getValue de CLUBS o método do enum vai ser chamado e se chamar de TESTE o seu método vai ser chamado. Veja também que o método de TESTE está sujeito as regras de sobrescrita de métodos.
|
Sun Certified Java Programer 6.0 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 26/01/2010 21:31:58
|
TiagoTC
JavaTeenager
Membro desde: 09/02/2008 01:12:58
Mensagens: 189
Offline
|
pablouu wrote:eu acho que complicaram na resposta.
eu vejo de uma forma mais simples, o método getValue está sendo sobrescrito por TESTE, sendo assim, se vc chamar o método getValue de CLUBS o método do enum vai ser chamado e se chamar de TESTE o seu método vai ser chamado. Veja também que o método de TESTE está sujeito as regras de sobrescrita de métodos.
Eu também acho q é exatamente isso...
|
Pérola: "Nunca coloque seu celular em um forno de microondas, pois isso faz com que a bateria exploda" - Manuais de telefones celulares |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 29/01/2010 20:10:38
|
Sesshoumaru
Debugger
![[Avatar]](/images/avatar/9af754b62b8cfc25e076e49930e9ea9c.jpg)
Membro desde: 02/09/2009 09:24:13
Mensagens: 66
Offline
|
Primeiramente obrigado!!
Na verdade é apenas um método sobrescrito...apos
rever algumas regras:
- Um metodo sobrescrito deve ter o msm tipo de retorno ou um subtipo;
- Um método sobrescrito deve manter a msm lista de argumentos;
Obs: na verdade eu tinha confundido com sobrecarga que deve ter lista
de argumentos diferentes...por isso a pergunta sobre a assinatura.
Creio que seja isso msm!!
vlw!!
|
SCJP 6 |
|
|
 |
|
|