Revisão
OCPJP7
Princípios OO
Questão
Qual afirmação é verdadeira?
A. At line 7 extending the abstract class “Switch” is more appreciate
than implementi...
Resposta
B é a opção correta. Nesse código tanto a interface quanto a classe abstrata
fornecem a mesma funcionalidade para...
Questão
Considere as afirmações
I. Implementing an interface and extending an abstract class provide same functionality an...
Resposta
E é a resposta correta.
Afirmação I é incorreta. Ao se estender uma classe abstrata, assim como estender
uma clas...
Questão
Selecione um:
A. Does not compile
B. ClassCastException is thrown
C. Prints "super"
D. Prints "sub"
Qual é o resul...
Resposta
D é a resposta correta.
O código demonstra o uso de retorno com covariantes, o tipo de de retorno do
método sendo...
Questão
Quais das opções são retornos legais do metodo callMe() na classe
Test? Selecione 2
a. X
b. AA
c. B
d. C
Resposta
Opções C e D estão corretas.
O suporte a retorno de tipos covariantes permite sobrescrever um método da super
cla...
Questão
O que acontecerá na tentativa de compilar e executar o código?
Selecione 1
a. Compiles fine and prints "Derived" a...
Resposta
Opção B é a resposta correta.
Quando um objeto da classe Derived é construído no método main, uma chamada
super()...
Questão
O que acontecerá na tentativa de compilar e executar o código?
Selecione 1
a. Does not compile
b. Prints 0
c. Prin...
Resposta
Opção A é a correta.
O código não compila porque o construtor da classe A está declarado como
privado. Isso cria ...
Questão
Dado o código. Quais 3 afirmações são verdadeiras?
Selecione 3
A. Runtime exception.
B. The code compiles and the ...
Resposta
Opções corretas são B, E e F
No código foi definido uma interface Foo. A classe A implementa a interface Foo, a c...
Questão
Qual é o resultado?
Selecione 1.
a. Compilation succeeds.
b. Compilation fails due to multiple errors.
c. Compilat...
Resposta
Opção A está correta.
O código declara corretamente a interface A com o método method1(), essa mesma interface
ta...
Questão
Insira código no #1 para que o código compile e execute.
Selecione 2.
A. protected void amethod(int i) throws Exce...
Resposta
Opções corretas são B e C.
Para que a sobrecarga seja válida a lista de argumentos do método deve ser diferente, ...
Questão
Quais mudanças deveriam ser feitas no código para reuzir o
overhead de sincronização em um singleton.
Selecione 2....
Resposta
Opções corretas são A e C.
Neste fragmento de código , há uma classe PageCache que tem um método static final get...
Questão
Qual Design Patter é demonstrado no métdo Calendar.
getInstance()?.
Selecione 1.
A. Factory pattern
B. Singleton p...
Resposta
A resposta correta é a opção A.
Padrão de projeto de Factory em Java é um padrão no qual uma classe separada tem ...
Questão
Que seguinte retratam o padrão de fábrica?
Selecione 2.
A. StringBuilder.append()
B. DriverManager.getConnection()...
Resposta
As respostas corretas são opção B e D.
Padrão de projeto de Factory em Java é um padrão no qual uma classe separa...
Questão
Qual afirmação é verdadeira sobre as classes e interfaces ao lado?
Selecione 1.
a. Compilation will succeed for al...
Resposta
A resposta correta é a opção C.
Em determinado trecho de código da classe C está estendendo a classe B e definir ...
Próximos SlideShares
Carregando em…5
×

Revisao OCPJP - Princípios OO

193 visualizações

Publicada em

Publicada em: Software
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Revisao OCPJP - Princípios OO

  1. 1. Revisão OCPJP7 Princípios OO
  2. 2. Questão Qual afirmação é verdadeira? A. At line 7 extending the abstract class “Switch” is more appreciate than implementing the interface “Switchable” B. At line 7 implementing the interface “Switchable” is more appreciate than extending the abstract class “Switch” C. At line 7 implementing the interface or extending the interface won’t give us any advantage over another. D. Since the both the interface and the abstract class are abstract, both of them will provide same flexibility. E. Implementing or extending will fail this code from compiling. Dado o código:
  3. 3. Resposta B é a opção correta. Nesse código tanto a interface quanto a classe abstrata fornecem a mesma funcionalidade para a classe It, mas implementar a interface é melhor porque permite a classe It estender outra classe se necessário. A é incorreta, pois se usarmos a herança de classe não poderemos fazê-lo novamente na classe It. C e D estã incorretas, pois nesse caso a interface claramente nos provê mais flexibilidade do que a classe abstrata. E é incorreta já que o metodo sw() foi corretamente sobrecarregado na linha 9
  4. 4. Questão Considere as afirmações I. Implementing an interface and extending an abstract class provide same functionality and flexibility. II. We should override all the methods when we extend an abstract class or Implement an interface to a non abstract class. III. Interfaces and the abstract classes are same. Qual está correto? Selecione um: A. All B. Only I C. Only II D. Only III E. None
  5. 5. Resposta E é a resposta correta. Afirmação I é incorreta. Ao se estender uma classe abstrata, assim como estender uma classe concreta, não se pode estender outra classe. No entanto ao se implementar uma interface, pode-se implementar outras além ainda pode estender uma classe. Afirmação II é incorreta, uma classe abstrata também pode ter métodos não abastratos, assim se você estender uma classe abstrata não necessariamente precisará sobrescrever “todos” os seus métodos. Afirmação III é incorreta, mesmo se uma interface for 100% abstrata, existem diferenças entra classes abstratas e interfaces. Uma grande diferença é que todos os métdos de uma interface são abstratos e publicos por padrão, enquanto que nas classes abstratas não.
  6. 6. Questão Selecione um: A. Does not compile B. ClassCastException is thrown C. Prints "super" D. Prints "sub" Qual é o resultado de compilar e executar o código abaixo?
  7. 7. Resposta D é a resposta correta. O código demonstra o uso de retorno com covariantes, o tipo de de retorno do método sendo sobrescrito é um subtipo do tipo de retorno do método sobrescrito. Aqui o super tipo é uma interface, o que é perfeitamente permitido. O objeto da classe Second foi designado a uma variável declarada do tipo First. Isso também é permitido já que a classe Second é uma subclasse de First. Já que o código compila a opção A está incorreta. Com a sobrescrita, mesmo que o tipo declarado tenha sido First, o método invocado foi o da classe Second, assim a saída é “sub”, o que torna as alternativas C incorreta e D correta.
  8. 8. Questão Quais das opções são retornos legais do metodo callMe() na classe Test? Selecione 2 a. X b. AA c. B d. C
  9. 9. Resposta Opções C e D estão corretas. O suporte a retorno de tipos covariantes permite sobrescrever um método da super classe retornando qualquer subtipo do tipo de retorno no método da classe super. O tipo de retorno declarado nas opções A e B são supertipos do tipo de retorno do método na classe super, o que não é permitido. Assim as opções A e B estão incorretas.
  10. 10. Questão O que acontecerá na tentativa de compilar e executar o código? Selecione 1 a. Compiles fine and prints "Derived" at runtime b. Compiler error c. Compiles fine but no output is produced d. Compiles fine and prints "Base" at runtime
  11. 11. Resposta Opção B é a resposta correta. Quando um objeto da classe Derived é construído no método main, uma chamada super() é automaticamente feita pelo construtor da classe. No entanto, não existe um constrututor sem argumentos na classe super, causando um erro de compilação. O compilador iria prover um construdor default, se nenhum construtor fosse declarado na classe. No entanto, nesse caso, a classe base definiu apenas um construtor com argumento.
  12. 12. Questão O que acontecerá na tentativa de compilar e executar o código? Selecione 1 a. Does not compile b. Prints 0 c. Prints 10 d. Prints 7
  13. 13. Resposta Opção A é a correta. O código não compila porque o construtor da classe A está declarado como privado. Isso cria um problema quando o construtor da subclase faz uma chamada implícita a super() para chamar o construtor ser argumentos da classe super quando B é instanciada. Já que o código não compila, todas as outras opções são incorreta. Se o construtor de A não fosse privado, a saída seria 7.
  14. 14. Questão Dado o código. Quais 3 afirmações são verdadeiras? Selecione 3 A. Runtime exception. B. The code compiles and the output is 200. C. If lines 14, 15 and 16 were removed, compilation would fail. D. If lines 19, 20 and 21 were removed, compilation would fail. E. If lines 14, 15 and 16 were removed, the code would compile and the output would be 200. F. If lines 19, 20 and 21 were removed, the code would compile and the output would be 100.
  15. 15. Resposta Opções corretas são B, E e F No código foi definido uma interface Foo. A classe A implementa a interface Foo, a classe A foi defininida em 2 locais: na linha 14 é definada como uma inner class da classe B, enquanto que na linha 19 é uma inner class de um método (o que é completamente legal). Inner class de métodos tem preferência sobre inner classe de classes. Quando o metodo testFoo() é invocado ele internamente inova o método fubar() e passe um objeto da classe A como referência. O objeto A passado é um da classe inner do método testFoo. Assim na execuçãodo métod bar() 200 será printado sem nenhum erro ou alerta, conforme descrito na opção B. Caso removêssemos as linhas 14,15 e 16, 200 seriam printado também sem nenhum erro, como descrito na opção E. Se removessemos as linhas 19,20 e 21 (a segunda declaração da classe A), a classe inner A seria chamada e o resultado seria 100, como descrito na oção F. Assim podemos descartar A, C e D, pois estão incorretas
  16. 16. Questão Qual é o resultado? Selecione 1. a. Compilation succeeds. b. Compilation fails due to multiple errors. c. Compilation fails due to an error only on line 20. d. Compilation fails due to an error only on line 21. e. Compilation fails due to an error only on line 22. f. Compilation fails due to an error only on line 12.
  17. 17. Resposta Opção A está correta. O código declara corretamente a interface A com o método method1(), essa mesma interface também declara uma variável do tipo String. B é uma interface vazia, o que também é permitido. A interface C estende as interfaces A e B (um interface pode estender uma ou mais interfaces), nessa interface existem 2 métodos, um com a mesma assinatura do método declarado na interface A. Já que os métodos de uma interface não possuem corpo, métodos com a mesma assinatura de métodos de interfaces estendidas podem ser declarados. Sendo assim o código compila e a opção correta é A.
  18. 18. Questão Insira código no #1 para que o código compile e execute. Selecione 2. A. protected void amethod(int i) throws Exception {} B. int amethod(float i){return 0;} C. void amethod(int i) throws RuntimeException {} D. public int amethod(int i) {return 0;}
  19. 19. Resposta Opções corretas são B e C. Para que a sobrecarga seja válida a lista de argumentos do método deve ser diferente, o tipo de retorno pode ser o mesmo ou não. Assim a opção B é uma sobrecarga válida do método amethod() de MyClass. O modificar de acesso não faz diferença em sobrecarga. A opção C é uma sobrescrita válida já que o tipo de retorno e os argumentos batem, nesse caso o modificador de acesso importa, devendo ser o mesmo ou mais amplo na sobrescrita. Exceções checadas novas não são permitidas serem lançadas, no entanto exeções não checadas novas podem ser lançadas. Opção A não é uma maneira correta de sobrescrita, já que lança uma nova exceção checada que não foi lançada no metodo original. Opção D não é uma sobrescrita ou sobrecarga válida já que os argumentos batem e apenas o tipo de retorno é diferente.
  20. 20. Questão Quais mudanças deveriam ser feitas no código para reuzir o overhead de sincronização em um singleton. Selecione 2. A. Mark the static variable cache as volatile. B. Mark the static variable cache as static and volatile. C. Insert before line 15 the code block : if(cache == null) { synchronized(PageCache.class) { // code from line 15 to 17 } } D. Nothing can be done to reduce the synchronization overhead.
  21. 21. Resposta Opções corretas são A e C. Neste fragmento de código , há uma classe PageCache que tem um método static final getInstance() e uma variável cache estática . O construtor padrão da classe PageCache é marcado como privado. O construtor desta classe não pode ser chamado de uma classe externa , uma vez que é privado. Isso impede que a instanciação da classe a partir de uma classe externa . Assim, apenas um método estático dentro da classe pode acessar o construtor da classe . O método getInstance() serve essa responsabilidade . Quando o método getInstance() é chamado, ele verifica a variável de cache para ser nulo , se sim, ele instancia -lo , senão ele retornar o objeto que já é referenciado pela variável de cache. Assim, verifica-se que existe um e somente um objeto que é criado e retornado quando solicitado. Este tipo de padrão de design é chamado de padrão de projeto Singleton em Java. No entanto, quando multithreading entra em cena , se dois ou mais segmentos de alguma forma entrar no bloco if no método getInstance() , haverá duas instâncias do pagecache o que é contraditório com o padrão Singleton . Então, marcando o método getInstance() como sincronizado garante a segurança do thread como apenas um segmento será capaz de introduzir o método de cada vez. Mas , esta é uma sobrecarga adicional , uma vez que diminui a velocidade de execução por cerca de 100 vezes . Para evitar isto, a variável de cache pode ser marcado como volátil , que garante que o valor de cache é sempre lido a partir da memória principal quando os segmentos estão envolvidos , e o bloco sincronizado na opção C pode ser adicionada de modo que a sobrecarga de sincronizar o método é removido . Isso é chamado de bloqueio duplo marcada. Assim, as opções A e C são as respostas corretas.
  22. 22. Questão Qual Design Patter é demonstrado no métdo Calendar. getInstance()?. Selecione 1. A. Factory pattern B. Singleton pattern C. DAO pattern D. None of these.
  23. 23. Resposta A resposta correta é a opção A. Padrão de projeto de Factory em Java é um padrão no qual uma classe separada tem a responsabilidade de fornecer entidades no sistema como e quando necessário usando seus métodos expostos . Em Java , o padrão de projeto de Factory é implementado , separando o código que cria objetos usando palavra- chave "new" . Este código é movido para uma classe separada e é parte de um novo método . Sempre que é necessário um objeto desta entidade correspondente, uma instância da classe de fábrica é referenciado eo método para a criação do objeto é chamado por essa instância . Isto leva a reutilização do código . Além disso, o princípio Java "abrir para a extensão fechado para modificação" é preservado. Além disso , o método na Factory é chamada utilizando um objeto da classe Factory . Portanto, este método de criação do objeto é um método de instância ou seja, um método não -estático. Isto é útil quando é necessário um código de criação de objeto personalizado . Nesse caso, o método pode ser substituído pela classe estendendo a classe Factory e correspondente código personalizado podem ser adicionados conforme a necessidade . Calendar é uma classe abstrata e getInstance() é um método estático dentro desta classe. Assim, quando chamamos Calendar.getInstance () , o novo calendário objeto é criado , cuja implementação real é dada por uma de suas subclasses , como GregorianCalendar . Este tipo de comportamento representa o padrão de Abstract Factory. Portanto, a resposta é A.
  24. 24. Questão Que seguinte retratam o padrão de fábrica? Selecione 2. A. StringBuilder.append() B. DriverManager.getConnection() C. Runtime.getRuntime() D. Integer.valueOf(String)
  25. 25. Resposta As respostas corretas são opção B e D. Padrão de projeto de Factory em Java é um padrão no qual uma classe separada tem a responsabilidade de fornecer dedicado entidades no sistema como e quando necessário usando seus métodos expostos . Método DriverManager.getConnection retorna um objeto do tipo Connection , que é uma interface. Assim, o tipo de objeto retornado depende da implementação da API JDBC. Então, essa API implementa projeto Abstract Factory . Além disso, Integer.valueOf (String) também leva o valor da String passada para ele e retorna um novo objeto Integer com este valor. Isto é porque os objetos inteiros são imutáveis ​​ou seja , não podem ser alterados . Assim , B e D são respostas corretas. StringBuilder.Append implementa o padrão de projeto Builder enquanto Runtime.getRuntime implementa o padrão de projeto Singleton. Então, A e C também não são respostas válidas .
  26. 26. Questão Qual afirmação é verdadeira sobre as classes e interfaces ao lado? Selecione 1. a. Compilation will succeed for all classes and interfaces. b. Compilation of class C will fail because of an error in line 2. c. Compilation of class C will fail because of an error in line 6. d. Compilation of class AImpl will fail because of an error in line 2.
  27. 27. Resposta A resposta correta é a opção C. Em determinado trecho de código da classe C está estendendo a classe B e definir dois métodos doit () e execute (). Em determinada classe código AImpl implementa corretamente interface A, para que possamos dizer que Aimpl é do tipo A e pode ser usado no lugar onde é exigido objeto do tipo A. Aqui Aimpl é usado como tipo em vez de A. Já que Aimpl implementa com sucesso interface A ele pode ser usado. Isso, é um exemplo válido de método de sobrescrito. Mas, enquanto define o metodo execute() a classe C define como um tipo de objeto em vez de String no retorno, conforme definido na classe B. As Object é super classe de String ele não pode ser usado como tipo de retorno em um sobrescrita. Também uma classe não pode ter método com mesmo nome na superclasse com apenas diferente tipo de retorno. Assim, a classe C não pode definir método execute() com o tipo de retorno Object. Isso vai causar um erro de compilação como descrito na opção C.

×