Pessoal, não sei se esse tipo de tópico deve ser criado nesse subfórum. Caso seja outro, por favor movam para o correto.
Estou estudando para a Certificação OCJP6 pelo livro Certificação Sun para Programador Java 6, SCJP da Kathy Sierra... Estou ainda no capítulo 2, e fiquei com algumas dúvidas em algumas questões, que não consegui tirá-las pela explicação do livro... Algumas me parecem obviamente erros de digitação, mas gostaria de confirmar com vocês...
CAPITULO 2 - QUESTÃO 9Dado o código a seguir:
public class Redwood extends Tree { public static void main(String[] args) { new Redwood().go(); } void go() { go2 (new Tree() , new Redwood()); go2((Redwood) new Tree() , new Redwood()); } void go2 (Tree t1, Redwood r1) { Redwood r2 = (redwood)t1; Tree t2 = (Tree)r1; } } class Tree{}Qual é o resultado? (Marque todas as alternativas corretas)
A. Uma exceção é lançada no momento da execução
B. O código compila e roda, sem mostrar qualquer resultado
C. Ocorre falha na compilação com um erro na linha 6
D. Ocorre falha na compilação com um erro na linha 7
E. Ocorre falha na compilação com um erro na linha 10
F. Ocorre falha na compilação com um erro na linha 11
Respondi a E, pois o cast está sendo feito com o nome da classe todo em minúsculo, e o Java é Case Sensitive:
Redwood r2 = ([color=red]redwood[/color])t1;
Porém o livro diz que a resposta certa é A. Neste caso, o cast pode ser feito com o nome da classe em letras minúsculas ou foi erro de digitação?
CAPITULO 2 - QUESTÃO 10Dado o código a seguir:
public class Tenor extends Singer { public static String sing() { return "fa"; } public static void main(String[] args){ Tenor t = new Tenor(); Singer s = new Tenor(); System.ou.println(t.sign() + " " + s.sing()); } } class Singer { public static String sing() { return "la"; }}Qual é o resultado?
A. fa fa
B. fa la
C. la la
D. Ocorre falha na compilação
E. Uma exceção é lançada em tempo de execução
Nesta pergunta, respondi a opção D, pois a sintaxe do System.out.println na linha 6 está incorreta, além do método sign() não existir:
System.[color=red]ou[/color].println(t.[color=red]sign()[/color] + " " + s.sing());
O livro diz que a resposta certa é a B. Neste caso, foi erro de digitação, não? Minha resposta pode ser considerada como válida?
E agora a que me deixou mais intrigado...
CAPITULO 2 - QUESTÃO 15Dado o código a seguir:
class A{} class B extends A{} public class ComingThru{ static String s = "-"; public static void main(String[] args){ A[] aa = new A[2]; B[] ba = new B[2]; sifter(aa); sifter(ba); sifter(7); System.out.println(s); } static void sifter(A[]... a2) { s += "1"; } static void sifter(B[]... b1) { s += "2"; } static void sifter(B[] b1) { s += "3"; } static void sifter(Object o) { s += "4"; } }Qual é o resultado?
A. -124
B. -134
C. -424
D. -434
E. -444
F. Ocorre uma falha na compilação
Eu respondi a F, por que a chamada do método sifter(7) na linha 10 envia um tipo primitivo (int) como argumento, mas não tem nenhum método que tem int como parâmetro, somente objetos. No livro, diz que a resposta correta é a D. Nesse caso, qual método é usando ao chamar sifter(7), e por quê? Ele é tratado como do tipo Object, mesmo sendo um tipo primitivo? Não entendi...
Quem puder me ajudar com essas dúvidas, ficarei muito agradecido!
