Dúvida em questão do Livro Kathy Sierra Java 6

2 respostas
C

Oi pessoal, sou novo no fórum e estou estudando Java pra certificação. Já aprendi muita coisa na faculdade, mas as vezes aprendemos de uma forma bruta, sem entender bem o porquê de conceitos básicos - só agora lendo o livro que mta coisa tá ficando clara pra mim. Estou estudando pelo livro da Kathy Sierra SCJP 6 e há uma questão que não estou concordando com a resposta. Me ajudem por favor. Segue a questão:

Given:

1. public class Electronic implements Device
{ public void doIt() { } }
2.
3. abstract class Phone1 extends Electronic { }
4.
5. abstract class Phone2 extends Electronic
{ public void doIt(int x) { } }
6.
7. class Phone3 extends Electronic implements Device
{ public void doStuff() { } }
8.
9. interface Device { public void doIt(); }

What is the result? (Choose all that apply.)
A. Compilation succeeds
B. Compilation fails with an error on line 1
C. Compilation fails with an error on line 3
D. Compilation fails with an error on line 5
E. Compilation fails with an error on line 7
F. Compilation fails with an error on line 9

Answer:
✓ A is correct; all of these are legal declarations.
B, C, D, E, and F are incorrect based on the above information. (Objective 1.2)

eu havia marcado letra E(falha de compilação na linha 7). Entendo eu o seguinte, quando tenho uma classe implementando uma interface, devo implementar obrigatoriamente todos os métodos da interface como é o caso na linha 1. Linhas 3 e 5 estendiam a classe em 1 e nesse caso a implementação dos métodos é opcional. Linha 9 declara a interface. OK. Mas na 7 a classe concreta não tem obrigação de implementar métodos das classes abstratas, mas ela implementa a interface Device, então deveria implementar os métodos desta referida interface obrigatoriamente? Não?

2 Respostas

Eric_Yuzo

Caracas, bem que o pessoal comenta que os códigos da SCJP são feios. A identação do livro é esta mesmo?

Quanto a sua dúvida, a classe Phone3 herda os métodos da classe Electronic, inclusive o método doIt(). Por isso não é necessário implementar o método novamente. Como a classe Electronic implementa Device, todas as classes que estendem Electronic também implementam Device.

Se quiser, poderia até remover a declaração: “implements Device” de Phone3, como Electronic implementa a interface Device, esta declaração está apenas para deixar explícito que Device é implementada.

Outra coisa, utilize a tag code quando postar código fonte: http://www.guj.com.br/java/50115-voce-e-novo-no-guj-vai-criar-um-topico-e-colar-seu-codigo-fonte-leia-aqui-antes-por-favor

C

pois é…realmente os códigos do livro são bem bagunçados…
obrigado pela explicação… e vou me acostumar as sintaxes do fórum, pode deixar.

Criado 5 de janeiro de 2011
Ultima resposta 7 de jan. de 2011
Respostas 2
Participantes 2