| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/09/2004 11:01:53
|
spierPJ
JavaTeenager
![[Avatar]](/images/avatar/0)
Membro desde: 14/11/2003 00:00:00
Mensagens: 193
Offline
|
Olá,
certificação não é um de meus objetivos (ainda), por isso não sei se esta mensagem está dentro dos objetivos deste fórum, mas achei a questão ( de um tópico do gd comp.lang.java, recomendo uma leitura diária das discussões) interessante:
Na instrução printIt(null), qual método printIt será executado, ou ocorre um erro?
Por que?
bob
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/09/2004 11:18:06
|
DiegoDiSouzaPJ
Java Ninja
![[Avatar]](/images/avatar/1)
Membro desde: 14/07/2004 00:00:00
Mensagens: 251
Offline
|
Eu acho que vai dar erro
pq qdo o main executar o printIt, ele não vai saber qual o tipo de argumento, portanto não saberá qual metodo chamar...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/09/2004 11:30:05
|
renan_danielPJ
GUJ Master
![[Avatar]](/images/avatar/0)
Membro desde: 13/05/2003 00:00:00
Mensagens: 1146
Offline
|
Acho que erro não dá não...
Acho que ambos metodos são iguais, pq vc pode ter uma String, ou vc pode ter um Object de String...
Acho
Se tivesse apenas um método, qualquer um dos dois do código, ele imprimiria normal, agora entre os dois, eu não sei qual realmente ele imprime...
Flw
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/09/2004 12:55:51
|
fabianoruyPJ
Thread.start()
![[Avatar]](/images/avatar/1)
Membro desde: 05/09/2004 00:00:00
Mensagens: 28
Offline
|
Acho que imprime o primeiro ("String: null").
Não dá erro pq String é um Object e o compilador procura o mais específico (String).
Só acho que isso não é Polimorfismo, certo? É apenas sobrecarga de nomes!
T+
Fabiano B. Ruy
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/09/2004 12:57:48
|
matheusPJ
GUJ Hacker
![[Avatar]](/images/avatar/1)
Membro desde: 23/03/2003 00:00:00
Mensagens: 6928
Offline
|
acho q vai dar erro de runtime!
|
http://www.portaljava.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/09/2004 13:12:16
|
renan_danielPJ
GUJ Master
![[Avatar]](/images/avatar/0)
Membro desde: 13/05/2003 00:00:00
Mensagens: 1146
Offline
|
fabianoruy wrote:o compilador procura o mais específico (String).
Fabiano B. Ruy
Eu não sabia que ele procurava o mais específico, se ele procura o mais específico, ele vai imprimir "String:null".
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/09/2004 13:18:17
|
fabianoruyPJ
Thread.start()
![[Avatar]](/images/avatar/1)
Membro desde: 05/09/2004 00:00:00
Mensagens: 28
Offline
|
É, eu já havia caido nessa!
Se fossem duas classes de hierarquias diferentes (tipo String e Integer), daria erro de compilação!
O tal do compilador é bom mesmo!
T+
Fabiano B. Ruy
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/09/2004 13:35:40
|
Rubem AzenhaPJ
GUJ Master
![[Avatar]](/images/avatar/1)
Membro desde: 21/06/2004 00:00:00
Mensagens: 1657
Localização: 69627310
Offline
|
estranhom não sei pq ele imprime String: null...
|
http://www.portaljava.com |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/09/2004 13:49:38
|
RafaelJPJ
JavaTeenager
![[Avatar]](/images/avatar/0)
Membro desde: 07/03/2004 00:00:00
Mensagens: 155
Offline
|
Porque quando há métodos de nomes iguais, porém com atributos diferentes, em tempo de execução ele sempre assumirá o método mais específico, conforme foi dito.
É uma regra que eu acho meio sem sentido, facílimo de confudir-se e sem muito propósito.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/09/2004 15:14:46
|
spierPJ
JavaTeenager
![[Avatar]](/images/avatar/0)
Membro desde: 14/11/2003 00:00:00
Mensagens: 193
Offline
|
fabianoruy wrote:Acho que imprime o primeiro ("String: null").
Não dá erro pq String é um Object e o compilador procura o mais específico (String).
Bingo
Só acho que isso não é Polimorfismo, certo?
Provavelmente! Coisa de rookie!
É apenas sobrecarga de nomes!
é isso mesmo?
A resposta:
There is a rule in the JLS about this. In the case of two or more
possible methods matching, the one that is selected is the one whose
parameter types most closely match the argument types in the method
call. In the case of the argument being null without a typecast, the
method with the most specific parameter types is selected.
In your code, String is more specific than Object, because String is a
subclass of Object. So therefore the compiler chooses printIt(String).
If you had two methods whose parameter types were equally specific,
for example printIt(String) and printIt(List), you would get a compiler
error. Likewise if you had two methods with two parameters, and neither
had both more specific than the other. For example printIt(Object,
String) and printIt(String, Object).
--
/-- Joona Palaste (palaste@cc.helsinki.fi) ------------- Finland --------\
\-- http://www.helsinki.fi/~palaste --------------------- rules! --------/
(http://groups.google.com/groups?selm=cimq6v%24dko%241%40oravannahka.helsinki.fi)
|
|
|
 |
|
|