| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/01/2012 19:46:53
|
sidney.tavares
JavaBaby
![[Avatar]](/images/avatar/6fc8f419ee0ea924e13e9f41a7e9c73f.png)
Membro desde: 09/04/2009 14:48:14
Mensagens: 96
Offline
|
Boa noite a todos os amigos, neste meu primeiro post do ano volto aqui para pedir ajuda em uma questão que encontrei em um simulado:
Daí vem as opções:
Eu marquei as opções A e D, a primeira porque não está lançando nenhuma exceção nova verificada e a segunda por estar lançando a mesma exceção, uma das que lança IOException eu não marquei por ser uma exceção mais genérica e o método não pode lançar e a outra porque não há sobrescrita, mas o teste diz que minha resposta está errada, vocês poderiam por favor me ajudar? Obrigado desde já, e feliz 2012 a todos.
|
Entusiasta Java |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/01/2012 19:54:50
|
jakefrog
GUJ Expert
![[Avatar]](/images/avatar/6e2400ec18b6f1952f1053c65df7a8b6.png)
Membro desde: 22/01/2007 22:00:53
Mensagens: 4191
Offline
|
E qual a pergunta dessa questão? Vc colocou as opções e não a pergunta.
This message was edited 1 time. Last update was at 02/01/2012 19:55:43
|
Meu blog sobre java uaiHebert.com
Conceitos OO - Diga, não pergunte!, Lei de Demeter
TDD Primeiros Passos, JUnit com HSQLDB, JPA e Hibernate, Cobertura de testes com JUnit Ant e Emma, Cobrindo seus testes com Cobertura, JUnit, HSQLDB, JPA
Código Limpo: Partes: 01,02,03,04,05
Web/JSF - Criando um WebServer, Tratando Exceções, Autenticação de Usuários (Filter/Servlet), JSF - Hello World, AutoComplete, JSF: Converter e Bean Auto Complete, Validação de Login de Usuário com JSF e JAAS, JSF Exibindo Objeto e Mensagens após Redirect, JSF Exemplos Simples com Ajax, JSF Parametros por Get Request RESTFullAplicação Web Completa JSF EJB JPA JAAS, Lazy JSF Datatable Pagination (Primefaces)
Design Pattern - Strategy, Design Pattern - Observer (Parte 01), Design Pattern - Observer (Parte 02)
Business (JPA)- Hibernate 3 com JPA 2, Create schema script: Ant, Hibernate 3 e JPA 2, TableGenerator Chave Primária Simples, SequenceGenerator,Chave Primária Composta, Mapeando Datas (Date) e Enum, Mapeando Duas Tabelas em uma Classe, @OneToOne Unidirecional e Bidirecional, @OneToMany e @ManyToOne Unidirecional e Bidirecional, @ManyToMany Unidirecional e Bidirecional, Ordernando listas e utilizando Map como atributo mapeado,Uma tabela por herança, JPA Uma Classe por Sub-Classe, JPA Consultas e Dicas, [HOT]Quatro soluções para LazyInitializationException[HOT]
SCJP(1.6 - Ingles - 29/12/2009)
SCWCD(1.5 - Ingles - 30/06/2010)
Vamos em frente que atrás vem gente! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/01/2012 19:59:47
|
sidney.tavares
JavaBaby
![[Avatar]](/images/avatar/6fc8f419ee0ea924e13e9f41a7e9c73f.png)
Membro desde: 09/04/2009 14:48:14
Mensagens: 96
Offline
|
Olá JakeFrog, cara, eu coloquei a pergunta como comentário no código, mas acredito já ter encontrado a resposta, NumberFormatException é uma exceção não verificada e portanto pode ser lançada pelo método que está sobrescrevendo, neste caso além das opções A e D, as opções E e F também compilam, fiz o que deveria ter feito antes de postar, fui olhar na documentação, só gostaria de me certificar se a minha conclusão está certa. valeu.
|
Entusiasta Java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/01/2012 20:59:26
|
ECO2004
JavaEvangelist
![[Avatar]](/images/avatar/400362daca8ad3cbfaf07300bc4bd898.jpg)
Membro desde: 06/11/2006 01:11:23
Mensagens: 305
Offline
|
sidney.tavares wrote:Boa noite a todos os amigos, neste meu primeiro post do ano volto aqui para pedir ajuda em uma questão que encontrei em um simulado:
Daí vem as opções:
Eu marquei as opções A e D, a primeira porque não está lançando nenhuma exceção nova verificada e a segunda por estar lançando a mesma exceção, uma das que lança IOException eu não marquei por ser uma exceção mais genérica e o método não pode lançar e a outra porque não há sobrescrita, mas o teste diz que minha resposta está errada, vocês poderiam por favor me ajudar? Obrigado desde já, e feliz 2012 a todos.
Override é quando você usa a mesma assinatura de um método, mas varia a sua implementação. Assim, se você deseja fazer um override, não pode haver outras exception além das declaradas pelo método pai.
Bem, a letra A define um novo método, por causa da falta da FileNotFoundException. As letras B, D, E e F seguem o mesmo raciocínio. A única que muda é a letra C, pois você chama na main new Slave().doFileStuff(), sem passar qualquer parâmetro para o objeto. Assim, será chamado o método original, que foi herdado pela classe filha.
Espero ter ajudado!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/01/2012 22:22:26
|
joaoluizjoaquim
HelloWorld
Membro desde: 02/07/2011 00:02:36
Mensagens: 11
Localização: Florianópolis
Offline
|
As respostas certas são:
A
D
E
F
Explicação:
Quando fazer uma sobrescrita de um método que sinaliza uma exceção você deve lembrar:
Pode lançar as mesmas checked exceptions que foi declarada no método original.
Pode lançar uma parte dessas exceções.
Pode lançar subclasses da exceção sinalizada.
Pode lançar qualquer runtime exceptions.
|
Oracle Certified Professional, Java SE 6 Programmer |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/01/2012 06:24:46
|
ECO2004
JavaEvangelist
![[Avatar]](/images/avatar/400362daca8ad3cbfaf07300bc4bd898.jpg)
Membro desde: 06/11/2006 01:11:23
Mensagens: 305
Offline
|
joaoluizjoaquim wrote:As respostas certas são:
A
D
E
F
Explicação:
Quando fazer uma sobrescrita de um método que sinaliza uma exceção você deve lembrar:
Pode lançar as mesmas checked exceptions que foi declarada no método original.
Pode lançar uma parte dessas exceções.
Pode lançar subclasses da exceção sinalizada.
Pode lançar qualquer runtime exceptions.
E a letra B?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/01/2012 06:46:37
|
sidney.tavares
JavaBaby
![[Avatar]](/images/avatar/6fc8f419ee0ea924e13e9f41a7e9c73f.png)
Membro desde: 09/04/2009 14:48:14
Mensagens: 96
Offline
|
Bom dia ECO2004,
A letra B esta incorreta porque o método sobrescrito não pode lançar uma exceção verificada nova ou mais abrangente do que o metodo original, neste caso IOException seria a exceção mais abrangente e deveria ter sido lancada na classe Master, acho que pra simplificar fica assim: FileNotFoundException e filha de IOException.
|
Entusiasta Java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/01/2012 08:42:37
|
ECO2004
JavaEvangelist
![[Avatar]](/images/avatar/400362daca8ad3cbfaf07300bc4bd898.jpg)
Membro desde: 06/11/2006 01:11:23
Mensagens: 305
Offline
|
sidney.tavares wrote:Bom dia ECO2004, A letra B esta incorreta porque o método sobrescrito não pode lançar uma exceção verificada nova ou mais abrangente do que o metodo original, neste caso IOException seria a exceção mais abrangente e deveria ter sido lancada na classe Master, acho que pra simplificar fica assim: FileNotFoundException e filha de IOException.
Esqueci que uma FileNotFoundException é derivada de uma IOException... Uma correção...o que está acontecendo com a letra B é um overload seguida de um override...o override ocorre por que o método tem o mesmo tipo de retorno e parâmetro (nenhum, no caso), enquanto que o overload ocorre quando uma nova exceção é assinada no método. Nesse caso, o overload sobrescreveu o método da classe pai. Override é sobrescrever. Overload é sobrecarregar. Se eu estiver errado, me corrijam!
This message was edited 1 time. Last update was at 03/01/2012 08:50:29
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/01/2012 08:59:02
|
sidney.tavares
JavaBaby
![[Avatar]](/images/avatar/6fc8f419ee0ea924e13e9f41a7e9c73f.png)
Membro desde: 09/04/2009 14:48:14
Mensagens: 96
Offline
|
Eco2004,
Cara, acho que você ta errado, se fosse sobrecarga compilaria, nao compila exatamente por ser sobrescrita, ou override,o que define a assinatura do método seria a lista de argumentos, e neste caso essa lista não foi alterada, ou seja, o método não tem argumentos. Para ser sobrecarregado ele deveria estar declarado assim:
Abraco.
|
Entusiasta Java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/01/2012 12:20:25
|
ECO2004
JavaEvangelist
![[Avatar]](/images/avatar/400362daca8ad3cbfaf07300bc4bd898.jpg)
Membro desde: 06/11/2006 01:11:23
Mensagens: 305
Offline
|
sidney.tavares wrote:Eco2004,
Cara, acho que você ta errado, se fosse sobrecarga compilaria, nao compila exatamente por ser sobrescrita, ou override,o que define a assinatura do método seria a lista de argumentos, e neste caso essa lista não foi alterada, ou seja, o método não tem argumentos. Para ser sobrecarregado ele deveria estar declarado assim:
Abraco.
@sidney.tavares
O método foi sobrescrito. Disse errado!
Um método é sobrecarregado quando somente o seu parâmetro muda, em quantidade, ordem ou tipo. O tipo de retorno nem entra.
Eu quis comprovar fazendo o seguinte. Pode-se notar que um objeto Slave recebe uma instância da classe Slave. Assim, primeiramente eu verifica se o método chamado se encontra em seu contexto (abrangendo os métodos herdados). Se eu criasse um objeto Master apontando para uma instância da classe Slave e depois invocasse o método doFileStuff(), primeiramente seria verificado se o método existe em Master para depois verificar se o mesmo foi override em Slave. Se fossem métodos diferentes e não o mesmo sobrescrito, ele invocaria o método da classe Master e depois iria ver que não existiria o mesmo sobrescrito em Slave e imprimiria "a". Mas isso não ocorreu. Ele imprimiu "b" da classe filha, contantando que realmente uma mudança de exceção somente não faz o método mudar.
Eu só não sei o porquê de não ter aceitado uma exceção mais abrangente que a primeira. Você sabe o motivo?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/01/2012 12:46:53
|
sidney.tavares
JavaBaby
![[Avatar]](/images/avatar/6fc8f419ee0ea924e13e9f41a7e9c73f.png)
Membro desde: 09/04/2009 14:48:14
Mensagens: 96
Offline
|
Olá Eco2004
Eu só não sei o porquê de não ter aceitado uma exceção mais abrangente que a primeira. Você sabe o motivo?
Bem, o motivo está na hierarquia, como IOException está acima de FileNotFoundExcepetion, a regra para sobrescrita de métodos diz que o método que sobrescreve não pode lançar uma exceção mais abrangente do que o método original, se isso acontecer o código não compila, não é que o método em si muda, mas uma regra da linguagem está sendo quebrada, esse assunto, sobrescrita e sobrecarga confunde mesmo, mas para essa questão em específico o que está sendo testado é se conhecemos as regras de sobrescrição e no caso da opção B esta regra está sendo quebrada, não sei se consegui me fazer entender, mas se ainda tiver dúvida estamos aí, abraço.
|
Entusiasta Java |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/01/2012 14:25:10
|
ECO2004
JavaEvangelist
![[Avatar]](/images/avatar/400362daca8ad3cbfaf07300bc4bd898.jpg)
Membro desde: 06/11/2006 01:11:23
Mensagens: 305
Offline
|
Está ok!
Obrigado.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/01/2012 14:30:09
|
emelianenko
Thread.start()
Membro desde: 20/09/2011 08:30:12
Mensagens: 38
Offline
|
sidney.tavares wrote:Olá Eco2004
Eu só não sei o porquê de não ter aceitado uma exceção mais abrangente que a primeira. Você sabe o motivo?
Bem, o motivo está na hierarquia, como IOException está acima de FileNotFoundExcepetion, a regra para sobrescrita de métodos diz que o método que sobrescreve não pode lançar uma exceção mais abrangente do que o método original, se isso acontecer o código não compila, não é que o método em si muda, mas uma regra da linguagem está sendo quebrada, esse assunto, sobrescrita e sobrecarga confunde mesmo, mas para essa questão em específico o que está sendo testado é se conhecemos as regras de sobrescrição e no caso da opção B esta regra está sendo quebrada, não sei se consegui me fazer entender, mas se ainda tiver dúvida estamos aí, abraço.
simplificando, é uma regra sobre exceções, metodo sobrescrito não pode lançar exceção de tipo mais generico que o metodo de origem.
|
|
|
 |
|
|
|
|