quinta-feira, 29 de julho de 2010

Questão 4 - Object Casting

class Putter {
  public static void main(String[] args) {
  Bango b1 = new Bango();
  Bango b2 = new Bongo();
  Bango b3 = new Bingo();

  \\insert code
  }
}


cass Bango { }
cass Bongo extends Bango { }
cass Bingo extends Bongo { }


Qual dos código a seguir, se substituirmos ao \\insert code, não irá compilar o código?
   A. Bongo b4 = b2;
   B. Bongo b5 = (Bongo) b2;
   C. Bango b6 = b3;
   D. Bango b7 = (Bango) b3;
   E. Bingo b8 = b3;
   F. Bingo b9 = (Bingo) b3;
   G. Bango b10 = (Bongo) b3;




Analisando uma a uma: (A) b2 é um Bango, logo, para poder atribuir a Bongo, precisa de um Casting (Bongo), como é feito na opção (B). A opção (C) b6 e b3 são do tipo Bango, na (D) é feito o Casting, já na (E) acontece o mesmo que na (A), ou seja, b8 é um Bingo e b3 um Bango, necessitando de um casting. (F) está sendo um casting correto e na (G) é feito um casting do Bongo, que é um Bango.

Questão 3 - Try Catch

System.out.println("1");
try {
   System.out.println("2");
   throw new FileNotFoundException();
}
System.out.println("3");
catch(EOFException e) {
   System.out.println("4");
}
catch (FileNotFoundException e ) {
   System.out.println("5");
}


   A. O código não compila
   B. Saída: 125
   C. Saída: 124
   D. Saída: 1235


Até poderíamos ter algum código compilado, se o System.out.println("3"); não estivesse no meio do bloco try catch, cuidado com este tipo de pegadinha, pois se não prestarmos atenção nisto, responderíamos certamente a opção D ou B, mas o bloco try catch está sintaticamente errado, logo não há como compilar , opção A.

quarta-feira, 28 de julho de 2010

Questão 2 - Classes Nativas

É correto afirmar:

A.      A classe Java.io.FileReader tem um método para ler um linha de dados
B.      A classe Java.io.BufferedReader tem um método para ler um linha de dados
C.   A classe Java.io.FileReader tem um método read()
D.   A classe Java.io. BufferedReader tem um método read()
E.   A classe Java.io. BufferedReader  pode ser instanciada com um Java.io.File como parâmetro do construtor
F.  A classe Java.io. BufferedReader  pode ser instanciada com um Java.io.FileReader como parâmetro do construtor

Ao analizar as respectivas classes, verifica-se que a BufferedReader possui um método readLine(), read() e seu construtor aceita um Reader. Já a classes FileReader, possui  um método read() e extend a classe Reader. Com isso pode-se dizer que as respostas certas são B, C, D e F, observando que a F está certa indiretamente, pois FileReader por extender Reader, é considerada também um Reader.

Questão 1 - Herança e Encapsulamento

Temos:
Class Zing { Hmpf h; }
Class Woop extends Zing{}
Class Hmpf {Zing z; }

  Quais estão corretas?
  A.      Woop é um Hmpf e é um Zing
  B.      Zing é um Woop and tem um Hmpf
  C.      Hmpf tem um Woop e Woop tem um Zing
  D.      Woop tem um Hmpf e Woop tem um Zing
  E.       Zing tem um Hmpf e Woop é um Zing
  F.       Hmpf tem um Zing e Woop tem um Hmp

Pode-se concluir com o código acima que Zing tem um Hmpf, Woop é um Zing, logo também tem um Hmpf, e Hmpf tem um Zing. Com base neste raciocínio, as únicas respostas que estão corretas seria a opção E e F.