| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/10/2007 17:19:00
|
du123
JavaChild
Membro desde: 27/11/2006 11:19:22
Mensagens: 127
Offline
|
Opa =)
Porque ele nao compila (Unhandled Exception)? Pelo q eu entendi, ele executará os métodos da classe filha...
Obrigado
|
Keep studying, little grasshopper... =) |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/10/2007 17:28:02
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
Não compila porque o java não deixa o programador cometer erros grosseiros.
Ao sobre-escrever um método a sua assinatura tem que ter exactamente as mesmas propriedades do método sobre-escrito.
Como o método original lança uma IOEXception o método novo tb tem que lançar.
Como não está lançando , o java está avisando-o que falta a exceção (Unhandled Exception).
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/10/2007 17:31:43
|
du123
JavaChild
Membro desde: 27/11/2006 11:19:22
Mensagens: 127
Offline
|
Não tem a ver com isso, amigo...
O erro apresentado é UNHANDLED EXCEPTION...
A subscrição foi aceita e está longe de ser um erro grosseiro =)
This message was edited 1 time. Last update was at 14/10/2007 17:32:41
|
Keep studying, little grasshopper... =) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/10/2007 18:13:00
|
Toni_Fatec
JavaTeenager
Membro desde: 09/05/2006 20:01:16
Mensagens: 165
Offline
|
Nao posso testar o código, mas não é preciso, vou responder pela lógica do seu código.
IOException herda de java.lang.Exception. A API do Java diz que toda exceção que herda de Exception, que não seja uma RuntimeException é do tipo checked. E diz ainda que toda checked exception deve capturar ou declarar que lança a exceção.
Você declarou que classe.A.metodo() lança uma IOExeption. Isto está correto, e diferente do que o sergiotaborda falou, o método que sobreescrever este método NÃO precisa ter uma assinatura exatamente igual, o que o método que sobreescrever nunca pode fazer é declarar novas checked exceptions.
Por exemplo, o código está correto:
O nosso metodo() sobreescreverá o metodo() da classe A num ambiente polimórfico e não há erro de compilação.
Voltando ao seu código, para resolver seu problema voce tem que lembrar que apesar da versão chamada pelo JVM ser classe.B.metodo(), a versão que o compilador vê é classe.A.metodo(), e como você declarou que LANÇA UMA CHECKED EXCEPTION no metodo() da classe.A então voce deve tratar está possibilidade com um bloco try {}catch().
Acredito que o seguinte código vai compilar a exibir b:
|
Tecnológo em Informática para Gestão de Negócios - UNESP/FATEC
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/10/2007 18:29:13
|
du123
JavaChild
Membro desde: 27/11/2006 11:19:22
Mensagens: 127
Offline
|
Excelente! Mto obrigado pela explicação!
O mesmo ocorreria em classes externas!
[]'s
|
Keep studying, little grasshopper... =) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/10/2007 19:12:33
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
du123 wrote:Não tem a ver com isso, amigo...
O erro apresentado é UNHANDLED EXCEPTION...
A subscrição foi aceita e está longe de ser um erro grosseiro =)
É , desculpa aí, foi mal. Eu vi tudo ao contrário.
Tudo, excepto o termo relativo a escrever o mesmo metodo em classes diferentes que é sobre-escrever.
o termo é override = escrever em/por cima = escrever sobre = sobre-escrever
O ifem é para criar uma palavra só como em ingles e com semelhança a subescrever, mas poderia escrever separado
tem o overload = carregar em/por cima = carregar sobre = sobrecarregar
This message was edited 1 time. Last update was at 14/10/2007 19:13:59
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/10/2007 22:57:01
|
du123
JavaChild
Membro desde: 27/11/2006 11:19:22
Mensagens: 127
Offline
|
Nao tenho certeza... mas pelo q eu sei, sobrecarregar o método (mesmo nome, mesma classe) é sobrescrever... reescrever na classe filha é subscrição...
Essa é a abordagem da K&B ao menos...
|
Keep studying, little grasshopper... =) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2007 08:36:23
|
LPJava
GUJ Hacker
Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline
|
bom vc ta chamando um metdo que lança uma excecao verificada entao deve declarar ou tratar a exceção.
Outro vc precisa encapsular a class Externa com a class interna.. no caso de static nao precisa da instancia...
vc pode fazer isso:
agora nao esqueça das regras de exceções.. sempre quando tiver um codigo.. olhe tudo que está nele e nao apenas a sua funcionalidade por exemplo.. esse seu codigo ai é sobre classe interna...mas a regra de exceções.. nesse caso deve ser lembrada..eheh o exame é cheio disso..95% das questoes é assim.. dar ideia que a classe executa uma coisa.. mais ele quer testar outra.. boa questao para o exame.. o cara olha e pensa que vai rodar.. tudo certinho se nao se ligar nas regras de exceções!
flw!
|
Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2007 08:58:44
|
sergiotaborda
GUJ Expert
![[Avatar]](/images/avatar/b4a0e0fbaa9f16d8947c49f4e610b549.png)
Membro desde: 22/03/2005 20:57:48
Mensagens: 3433
Offline
|
du123 wrote:Nao tenho certeza... mas pelo q eu sei, sobrecarregar o método (mesmo nome, mesma classe) é sobrescrever... reescrever na classe filha é subscrição...
Essa é a abordagem da K&B ao menos...
Tlv essa seja a abordagem do tradutor da K&B, porque em inglês existe uma distinção clara (override vs overload)
Não faz sentido que sobrecarregar seja o mesmo que sobre-escrever porque quando vc sobrecarrega vc não está redefinindo o codigo original, não está escrevendo por cima dele. Está escrevendo "ao lado".
Mas como não conheço a tradução não posso dizer mais. Só sei que não usaria essas palavras como sinonimos.
Override = sobre-escrever = declarar métodos não estáticos com a mesma assinatura em classes diferentes.
Overload = sobrecarregar = declarar métodos não estáticos com nomes iguais e assinatura diferente na mesma classe ou hierarquia.
Redefinition = redefinição = declarar métodos estáticos com a mesma assinatura em classes diferentes.
This message was edited 1 time. Last update was at 15/10/2007 08:59:06
|
Criando sua própria API de Validação
Blog do MiddleHeaven |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/10/2007 10:47:24
|
LPJava
GUJ Hacker
Membro desde: 18/04/2006 12:50:23
Mensagens: 5524
Localização: Bahia/Porto Alegre
Offline
|
resumindo:
- apenas os metodos(instancia) são herdados.
- os metodos static sao redefinidos mais nao herdados, eles pertence a class e nao a instancia
- variaveis nao sao herdadas
- sobrecarga: dois metodos com mesmo nome no mesmo local porem com argumentos diferentes. se alterar apenas o tipo do metodo e manter o nome, isso nao é sobrecarga e o codigo nao complica(com exceção de retorno covariantes do java 5).
A regra geral é essa. Apesar da tradução está com pequenos.. erros mas a segunda edição ta otima.. em relação a edição K&B nao afeta nos estudos nao.. ao contrario da ed.1.
|
Sun Certified Java Programmer 5.0
Blog:http://www.camilolopes.com
Twitter:www.twitter.com/camilolope
Linkedin: http://br.linkedin.com/in/camilolopes
Curso online OCPJP: http://pro.imasters.com.br/online/cursos/preparatorio-para-certificacao-java-ocjp
Autor livro Guia SCJP & JEE c/ Frameworks: http://blog.camilolopes.com.br/livrosrevistaspalestras/
|
|
|
 |
|
|