Questão sobre Inner Class do livro da Kathy Sierra

Ola fiquei confuso com a seguinte questão:

Given:

class Boo {
   Boo(String s) { }
   Boo() { }
}
class Bar extends Boo {
   Bar() { }
   Bar(String s) (super(s);}
   void zoo() {
   // insert code here
   }
}

Which create an anonymous inner class from within class Bar? (Choose all that apply.)

A) Boo f = new Boo(24) { };

B) Boo f = new Bar() { };

C) Boo f = new Boo() (String s; };

D) Bar f = new Boo(String s) { };

E) Boo f = new Boo.Bar(String s) { } ;

A resposta correta é B e C… mas pq?

Fala luistiagos…

vamos lá… explicar cada item, talvez ajude.

A) Boo f = new Boo(24) { };
Boo não possui construtor que receba um inteiro. Portanto, questão incorreta.

B) Boo f = new Bar() { };
Válido. Porque Bar é um Boo (i.e.: Bar extends Boo). E há um construtor vazio. E você adicionando o {} após o construtor, que dizer que você está criando uma anonymous class. Mesmo apesar de não redefiní-la, deixando apenas em branco.

C) Boo f = new Boo() (String s; };
Acredito que seja Boo f = new Boo() "{"String s; };. Há um ( onde deveria ser um { no seu post.
Caso esteja correto isso, é válido. Já que você estaria construindo um Objeto Boo, que existe e possui este construtor, e declarando dentro dele uma variável nova, do tipo String com o nome s.

D) Bar f = new Boo(String s) { };
Isso não é válido. Por que um Boo não é um Bar, mas sim um Bar é um Boo. Sei que é um pouco complicado, mas no livro há alguns exemplos deste tipo que talvez ajudem caso necessário ;-).

E) Boo f = new Boo.Bar(String s) { } ;
Inválido, porque Boo.Bar só funcionaria se Bar fosse uma innerclass de Boo. O que não é verdadeiro.

Portanto, as alternativas B e C estão corretas.

Espero ter ajudado :slight_smile:

Abraço

Então…a questão dá a idéia de que o ponto é a partir do lado de dentro de Bar mas a execução do código do item C (Boo f = new Boo() (String s; }; ) não envolve a classe Bar.

Estou começando a achar que o código ou as questões estão com algum engano.

Fiquei confuso também :?

[]'s

Poise é justo neste ponto que fiquei confuso…

Ahhhhh!!! Acho que entendi. Vou fazer alguns testes.

Valeu kinow.

[]'s

Então luistiagos parece que no item C funciona porque o construtor da subclasse Bar(String s) (super(s);} dá condições pra isso.

Vou fazer alguns teste pra verificar isso.

[]'s

A questão é:

Boo f = new Boo() (String s; }; 

o que esta linha tem haver com Bar???

[quote=luistiagos]A questão é:

Boo f = new Boo() (String s; }; 

o que esta linha tem haver com Bar???[/quote]

O livro pergunta quais opções criarão uma classe anônima da(no sentido de estar na) Classe Bar. La aonde tem //insert code.