Pegadinha - Casting , Inner Classe e Interfaces

7 respostas
duardor

Segue o seguinte codigo:

1:public class teste {
2:   static public void main(String[] args) {
3:      inter A = new teste().new inner();
4:      A.metodoInterface();
5:      inner B = (inner)A;
6:      B.metodo();
7:   }
8:   class inner implements inter {
9:      public void metodo(){
10:        System.out.println("METODO INNER ");
11:      }
12:      void metodoInterface(){
13:        System.out.println("METODO DA INTERFACE");
14:      }
15:   }
16:}
17:
18:interface inter {
19:  void metodoInterface();
20:}

O que acontece?
(a) Não compila na linha 8
(b) Compila e mostra METODO DA INTERFACE seguido de METODO INNER
© Excecao de tempo de execução na linha 3

E ai galera?
Tentem sem compilar e depois tentem mudar algunmas coisas nesse mesmo código, dá pra testar vários conceitos com ele…

Abraços

7 Respostas

Elvis.The.Pelvis

Na verdade da erro de compilação na linha 12.

Os métodos na interface são públicos por default. Aí você está tentando diminuir a visibilidade para default.

Mas afora isso, o resultado é o esperado. Imprime as mensagens.

(Ah só descobri esse erro de visibilidade quando compilei mesmo. Já que não fazia parte das respostas eheheh. Atenção, atenção, preciso de mais atenção)

duardor

hehehe elvis fazia sim
na linha 8 ueh
o erro que o javac dah eh na linha 8
tah na resposta
:stuck_out_tongue:
eu tb nao intendi bem…
mesmo que vc deixe a visibilidade como default na declaracao da interface o codigo nao compila… mais certo seria o compilador dizer que o metodo da interface deve ser publico…
Abraços

Elvis.The.Pelvis

Não não. Aki rodou blz, tirando o problema da linha 12 de visibilidade. UXE!!! Tamo falando a mesma língua???

AHHHH compilei no eclipse. Em vez de dar output da compilação ele mostra aquelas task error.

Cara não consigo viver sem o output do compilador.

Essa pegadinha é sacana!!!

Elvis.The.Pelvis

ENTRETANTO,

ë muito difícil você ver esse tipo de coisa na prova de certificação. Eles não usam esses artifícios para “ludibriar” programador. Nessa questão você é levado a entender que é uma questão de inner classes e cast, mas é de um detalhe bem mais específico.

Num simulado já ví algo do tipo

public class Algo {
  public String do(int x) {
    //Itera entre uma porrada de array, monta umas strings malucas
    //Faz mais algumas coisas complexas com ?:
  }

  String result = "Java" + do(2);

  for (condição escabrosa) {
    result += do(x);
  }

  System.out.println(result);
}

Perguntava qual o resultado de se tentar compilar e executar a classe.
1 - Imprime <String sem sentido>
2 - Lança uma exceção
3 - Dá erro de compilação
.
.
.

Cara, do é palavra reservada. Você não pode declarar um método com esse nome. E você achando que era uma questão de flow control.

Eles não fazem isso nas provas.

duardor

Hhehehhe
eu gosto muito do eclipse tb mas eu to estudando pra prova e lah tem umas questao q pede o q o compilador dah de saida… dai e no javac mesmo…
hhehe
valew
Abraços

duardor

Nao tem desse tipo de questao nao?
eu vi alguns simulados com questoes bem parecidas…
me corrija ai se tiver errado

Elvis.The.Pelvis

Não. Nada dessas pegadinhas. Só testando seus conhecimentos no assunto mesmo. Pelo menos nas provas minh e de mais 5 amigos nada disso caiu.

E segundo o Complete Java2 Certification Study Guide os elaboradores da prova tentam fazer certeza que a questão seja bem entendida e sem “cascas de banana”.

Criado 16 de março de 2003
Ultima resposta 16 de mar. de 2003
Respostas 7
Participantes 2