| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/02/2010 11:53:35
|
TiagoTC
JavaTeenager
Membro desde: 09/02/2008 01:12:58
Mensagens: 189
Offline
|
Pra mim era para dar erro na linha 20, já que é impossível b ser uma instância de Fish. Alguém pode me explicar porque não gera erro de compilação na linha 20?
This message was edited 1 time. Last update was at 13/02/2010 11:54:07
|
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) 13/02/2010 12:01:32
|
renzonuccitelli
GUJ Master
Membro desde: 17/09/2008 12:58:32
Mensagens: 1133
Offline
|
O instanceof serve só para perguntar se o objeto é instancia de uma determinada classe. Logo não teria porque da erro, simplesmente o print da linha 20 não será impresso.
This message was edited 1 time. Last update was at 13/02/2010 12:02:39
|
Renzo Nuccitelli
Engenheiro de Computação - ITA
http://nuccitec.com.br/
http://blog.nuccitec.com.br/
http://jcoltrane.sf.net
http://jfera.nuccitec.com.br/
http://code.google.com/p/webapp-ce/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/02/2010 12:02:44
|
TiagoTC
JavaTeenager
Membro desde: 09/02/2008 01:12:58
Mensagens: 189
Offline
|
renzonuccitelli wrote:O instanceod serve só para perguntar se o objeto é instancia de uma determinada classe. Logo não teria porque da erro, simplesmente o print da linha 20 não será impresso.
Vc quer dizer que ele não funciona com interfaces?
|
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) 13/02/2010 12:10:04
|
renzonuccitelli
GUJ Master
Membro desde: 17/09/2008 12:58:32
Mensagens: 1133
Offline
|
Serve com interfaces tb. Se a classe implementar a interface, ou uma de suas ancestrais implementar, o instanceof retorna true.
|
Renzo Nuccitelli
Engenheiro de Computação - ITA
http://nuccitec.com.br/
http://blog.nuccitec.com.br/
http://jcoltrane.sf.net
http://jfera.nuccitec.com.br/
http://code.google.com/p/webapp-ce/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/02/2010 12:45:10
|
TiagoTC
JavaTeenager
Membro desde: 09/02/2008 01:12:58
Mensagens: 189
Offline
|
Ainda não entendi...
Tipo, o seguinte código gera erro de compilação:
Por que entao no meu primeiro exemplo o compilador tambem nao detecta?
|
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) 13/02/2010 12:50:42
|
vmsb11
Java Ninja
Membro desde: 25/08/2008 12:35:00
Mensagens: 251
Offline
|
porq no primeiro exemplo vc está utilizando interfaces....
quando vc compara com uma interface não dará erro de compilação porq a classe poderá estar implementando a interface de forma indireta....
This message was edited 1 time. Last update was at 13/02/2010 12:51:58
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/02/2010 13:05:21
|
andeb
Thread.start()
Membro desde: 17/05/2009 21:01:04
Mensagens: 47
Localização: Blumenau
Offline
|
vmsb11 wrote:porq no primeiro exemplo vc está utilizando interfaces....
quando vc compara com uma interface não dará erro de compilação porq a classe poderá estar implementando a interface de forma indireta....
Não é bem isso, isso aqui também não compila:
A resposta é simples e você já disse, não compila por que String em nenhum hipótese pode ser um Fish, afinal ele é final...
Não tem como mudar a árvore, mude o Bluegill para final também que você vai ter o erro de compilação.
O exemplo abaixo é válido e o instance of retorna true.
Agora sim, através de polimorfismo podemos dizer que Bluegill é sim um Fish.
Ok?
|
"it's not what you know, it's when you know it" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/02/2010 14:41:27
|
TiagoTC
JavaTeenager
Membro desde: 09/02/2008 01:12:58
Mensagens: 189
Offline
|
andeb, quer dizer que só ocorre erros de compilação no instanceof quando vc está fazendo qualquerReferenciaDeQualquerClasseSejaEstaFinalOuNao instanceof AlgumaCoisaFinalAqui ou algumacoisafinalaqui instanceof QualquerClasseOuInterfaceSejaElaFinalOuNao ??? É 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) 13/02/2010 15:00:36
|
andeb
Thread.start()
Membro desde: 17/05/2009 21:01:04
Mensagens: 47
Localização: Blumenau
Offline
|
Nesse caso, a recíproca é verdadeira hehe
Não importa em qual lado vai estar o final, o compilador vai acusa como erro quando não for possível, em hipótese nenhuma, que a condição seja verdadeira. Quando uma classe não é final, ela pode ser extentida e/ou implementado por outra que faça a condição ser verdadeira.
|
"it's not what you know, it's when you know it" |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/02/2010 15:30:57
|
Leonardo3001
GUJ Ranger
Membro desde: 04/07/2007 18:28:58
Mensagens: 975
Offline
|
Imagine a seguinte situação:
Só vai dar erro de compilação quando o tipo da variável t não for "pai" (ou "avô", ou "bisavô"...) de MinhaClasse, porque aí, é obvio que não há a possiblidade de ser verdadeiro. Ou melhor dizendo: é erro quando as classes TipoQualquer e MinhaClasse não são da mesma árvore da hierarquia de classes.
Agora, com interfaces, a coisa muda de figura, porque não existe qualquer relação de hierarquia entre classe e interface. Suponha a seguinte situação:
Talvez TipoQualquer não implemente MinhaInterface. Mas quem garante que filhos de TipoQualquer (que podem ser atribuídos à variável t) não resolva implementar essa interface? Ninguém! Por isso que o compilador não pode fazer nada! No primeiro exemplo ali de cima, não tem como um filho de TipoQualquer herdar de MinhaClasse, não existe herança múltipla!
This message was edited 1 time. Last update was at 13/02/2010 15:32:02
|
Leonardo Veríssimo
-------------------------------------------------
Objectzilla |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 13/02/2010 17:29:48
|
TiagoTC
JavaTeenager
Membro desde: 09/02/2008 01:12:58
Mensagens: 189
Offline
|
Leonardo3001, por esse seu racioncínio, não tem como afirmar que sempre que você estiver fazendo x instanceof InterfaceQualquerAqui e x se referir à uma classe não final, não iremos ter um erro de compilação?
This message was edited 2 times. Last update was at 13/02/2010 17:32:40
|
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) 13/02/2010 19:27:29
|
Leonardo3001
GUJ Ranger
Membro desde: 04/07/2007 18:28:58
Mensagens: 975
Offline
|
TiagoTC wrote:Leonardo3001, por esse seu racioncínio, não tem como afirmar que sempre que você estiver fazendo x instanceof InterfaceQualquerAqui e x se referir à uma classe não final, não iremos ter um erro de compilação?
O que estou dizendo é: se eu estiver fazendo
, onde x refere-se a uma classe não-final, nunca iremos ter erro de compilação.
|
Leonardo Veríssimo
-------------------------------------------------
Objectzilla |
|
|
 |
|
|