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…
[quote]CAPITULO 2 - QUESTÃO 9
Dado 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[/quote]
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?
[quote]CAPITULO 2 - QUESTÃO 10
Dado o código a seguir:
[code]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”; }}[/code]
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[/quote]
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…
[quote]CAPITULO 2 - QUESTÃO 15
Dado 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[/quote]
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!