| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2009 13:13:13
|
Daniel.F
GUJ Ranger
Membro desde: 29/03/2007 18:30:39
Mensagens: 909
Offline
|
Boa Tarde, pessoaLL.
O seguinte codigo imprime 40 para tal eu cheguei a conclusão que o construtor da superclasse está chamando um metodo sobrecarregando na subclasse.
Agradeço qualquer explicação.
This message was edited 2 times. Last update was at 14/02/2009 13:20:41
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2009 13:50:38
|
brrodo
JavaTeenager
Membro desde: 07/02/2009 23:31:16
Mensagens: 173
Offline
|
Ao instanciar objeto "d" (Derived) seu construtor chama primeiro o construtor da superclasse Base, implicitamente (super()), que vai invocar o método "addValue()" que foi sobrescrito na subclasse, fazendo "value" valer 20, após isso é executado o construtor da subclasse Derived, q adiciona mais 20 ao "value", resultando em 40.
Portanto, o método "addValue()" foi sobrescrito e não sobrecarregado, pois se fosse sobrecarregado, como a referência de "b" foi feita para a superclasse Base, o método "addValue" da subclasse não seria exergado qd fosse invocado.
This message was edited 1 time. Last update was at 14/02/2009 13:57:04
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/02/2009 16:59:14
|
Daniel.F
GUJ Ranger
Membro desde: 29/03/2007 18:30:39
Mensagens: 909
Offline
|
Eu entendi que se trata sobreescrição.
O que eu não entendi é por que quando o construtor da superclasse e executado e chamado a versão sobeescrita do metodo??
Obrigado.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/02/2009 09:00:53
|
victorwss
JWizard
![[Avatar]](/images/avatar/4ab232445f9b21b65dfdf6ea5f27f704.png)
Membro desde: 18/12/2007 14:46:00
Mensagens: 2409
Localização: São Paulo - SP
Offline
|
Essa é a grande vantagem da sobrescrita. Você poder redefinir o método. Imagina que o método na superclasse fosse abstrato, o que aconteceria se ele fosse invocado e a superclasse não pudesse ver o método sobrescrito?
Sobrescrever significa "esqueça a implementação da superclasse e use isto no lugar".
|
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) 17/02/2009 07:54:25
|
lipe82
Debugger
![[Avatar]](/images/avatar/21d58309d158bcb0e3e70a3827221e7c.jpg)
Membro desde: 28/04/2006 10:59:33
Mensagens: 61
Offline
|
Cara, isso é muito fácil de confundir! Muito bom exemplo!
Na primeira vez q eu vi parecia-me que vc estava chamando b.addValue() e não b.getValue(). Mesmo acessando o contrutos da superclasse ele ainda usa o método sobreescrito. Então instanciando uma variável da subclasse o método da superclasse não será útil mais. Mesmo qd foi chamado dentro do construtor da superclasse.
Mas... olha só o que eu fiz tentando estudar um pouco mais o código
Coloquei o método da superClasse como private. Resultado... o código compila, porém o método addValue não é sobreescrito, então o primeiro contrutor que roda, o da classe Base é obrigado a chamar o método addValue da classe Base e depois o segundo contrutor que roda, da classe Derived chama o método addValue() da classe Derived.
Resultado:
To sendo chamado na classe base
To sendo chamado na classe Derived
30
É nóis estudando pra certificação....
This message was edited 1 time. Last update was at 17/02/2009 08:24:28
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/02/2009 10:53:36
|
Jair Rillo Junior
Moderador
![[Avatar]](/images/avatar/31b3b31a1c2f8a370206f111127c0dbd.jpg)
Membro desde: 29/04/2003 21:19:53
Mensagens: 2524
Localização: São Paulo / Campinas
Offline
|
Apesar que isso possa ser fácil de confundir, ele pode ser um grande aliado no dia a dia. Dê uma pesquisada sobre Template methods pattern e você vai entender melhor essa parte de sobreescrita e como ela pode te ajudar no dia a dia.
|
Jair Rillo Junior
http://www.jairrillo.com/blog | Twitter | SCJA, SCJP, SCWCD, SCBCD, IBM SOA Associate |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 17/02/2009 11:28:09
|
Daniel.F
GUJ Ranger
Membro desde: 29/03/2007 18:30:39
Mensagens: 909
Offline
|
Ficou legal tópico bastante esclarecedor.
Valeu pessoal.
|
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/11/2011 12:14:49
|
antwort
What is classpath?
![[Avatar]](/images/avatar/d08c2f52950100b965171b953f7fd8b7.jpg)
Membro desde: 05/05/2009 20:33:13
Mensagens: 7
Offline
|
Muito legal eu ter topado isso aqui, eu vou prestar a OCJP e se caisse esse tipo de coisa nem sei o que eu responderia.
Vlw galera.
This message was edited 1 time. Last update was at 14/11/2011 12:15:14
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/11/2011 18:36:18
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20570
Localização: Curitiba/PR
Offline
|
Jamais chame métodos sobrescritos no construtor da classe.
Lembrem-se que a construção ocorre de cima para baixo, portanto, você estará chamando um método de um trecho da classe que sequer foi construído ainda.
O comportamento disso é completamenteindefinido. E, mesmo onde não der erro, será inconsistente também.
|
@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 |
|
|
 |
|
|