Eu marquei a opção D, mas o simulado me diz que a correta é a B, com a seguinte explicação:
Dizendo que é a correta porque a sintaxe está usando os nomes tanto da classe encapsuladora quanto da classe interna, testei o código e com a opção que eu marquei compila e executa também, me parecendo que também cria uma instância de Bar. Minha dúvida é, se uma questão desse tipo cai no exame, porque só a opção B é a maneira correta de criar uma instância da classe interna. Agradeço desde já pela ajuda. Abraços.
Estranho mesmo manolo, a opção D tbm cria um objeto Bar. Pode ser que a questão seja sobre o correto uso da sintaxe. Apesar que o enunciado pergunta qual cria uma instancia de Bar. Estranho.
E
entanglement
Não acho que cairia uma coisa tão detalhista como esta. De qualqer forma, se você testar vai ver que b é a resposta certa mesmo.
classFoo{publicFoo(){}classBar{publicBar(){}}}classFooBar{publicstaticvoidmain(String[]args){Foof=newFoo();Foo.Barfb=f.newBar();// OKFoo.Barfb2=f.newFoo.Bar();// Ele se confunde achando que você quer chamar o construtor de Foo// Por isso, a mensagem (que é um pouco incompreensível, na verdade) é "'(' expected". }}
Eu também achava que tinha de usar Foo.Bar, já que o nome da classe é pacote.Foo.Bar.
sidney.tavares
Valeu pelas respostas amigos, entanglement, no seu código eu entendi, mas olha a resposta que eu marquei como certa, a letra D, não faz a mesma coisa? Abraço.
E
entanglement
classFoo{publicFoo(){}classBar{publicBar(){}}}classFooBar{publicstaticvoidmain(String[]args){Foof=newFoo();Foo.Barfb=f.newBar();// OKBarfb2=f.newBar();// Erro: 'Can not find symbol' (lembre-se, o nome da classe é Foo.Bar) }}
Não, porque o nome da classe é Foo.Bar.
ribclauport
Realmente, esta questão caiu na minha prova, e no meu mock o cara coloca um detale, que talvez elucide melhor a explicação do entanglement.
Veja que se digitar em um pacote chamado view isso aqui nao vai compilar
packageview;classFoo{classBar{}}classTest{publicstaticvoidmain(String[]args){Foof=newFoo();Bard=f.newBar();//aqui da erro, pois dentro de view, não existe a classe Bar!, e a minha IDE diz: Bar cannot be resolved to a type}}
Como o entanglement explicou a classe é Foo.bar, e seu nome qualificado seria view.Foo.Bar, porém acho que você colocou o código na IDE e não viu uma sutil diferença:
packageview;importview.Foo.Bar;//aqui a IDE as vezes coloca o import sozinha, ou você da um CTL+Shift+O no Eclipse!classFoo{classBar{}}classTest{publicstaticvoidmain(String[]args){Foof=newFoo();Bard=f.newBar();}}
Repare que agora existe um import da Classe com seu nome totalmente qualificado, e desta Forma você pode usá-la no código, mas na questão não existe
declaração de import!
Att.
gabrielfrios
Até ai tudo bem, mas a questão não seria sobre o que a questão está pedindo?
Which, inserted at line 7, creates an instance of Bar?
ribclauport
gabrielfrios:
Até ai tudo bem, mas a questão não seria sobre o que a questão está pedindo?
Which, inserted at line 7, creates an instance of Bar?
Which, inserted at line 7, creates an instance of Bar?
Bom, se eu entendi sua citação, a questão está pedindo o que inserido na linha 7 vai criar uma intância de Bar, e toda a abordagem no post foi a respeito da motivação do código não compilar, como pudemos ver o código não trás uma declaração package, não traz uma declaração import, e se você colocar o código para compilar(Pode ser uma IDE no pacote default), verá que não compila, pois não existe uma classe com o nome qualificado Bar, e sim uma classe chamada Foo.Bar, pois uma classe interna é considerada um membro da classe que a detém, hora o código abaixo não compila:
class Foo{
class Bar{}
}
class Test{
public static void main(String [] args){
Foo f = new Foo();
Bar d = f.new Bar(); //Bar cannot be resolved to a type (É isso que a IDE vai te dizer, não existe o tipo Bar!
}
}
Mesmo se você tentar importar a classe Bar não vai funcionar!
veja o código abaixo, lembrando que estou no momento testando esse código em meu Eclipse sem a presença de um package, e sim no default!
importFoo.Bar;//The import Foo cannot be resolvedclassFoo{classBar{}}classTest{publicstaticvoidmain(String[]args){Foof=newFoo();Bard=f.newBar();// Bar cannot be resolved to a type}
Bom diante dos testes, lembrando que o código reside sobre o pacote “default”, seguindo a mesma lógica do código da questão, mostra que o texto do post citado abaixo, não coincide com o que foi exposto acima, veja o texto:
A única forma de o código ter ter sido testado como o post relata, é o mesmo ter sido inserido em um pacote, e ter sido inserido a declaração import como citado abaixo
em meu post:
Bom, espero ter sanado, o que na verdade não entendi muito com o que foi dito:
Até ai tudo bem, mas a questão não seria sobre o que a questão está pedindo?
Pois para mim tem tudo a ver com o que a questão pediu.
Att
gabrielfrios
ribclauport eu já tinha entendido a sua explicação. Agora eu entendi que no contexto da questão, sem adição de package e import, apenas a resposta B criaria uma instancia.
sidney.tavares
ribclauport, esclareceu 100% minha dúvida, realmente eu não prestei atenção ao fato da IDE realizar o import automaticamente, obrigado mesmo, estou encerrando o tópico.
ribclauport
Opa, valeu rapaiz, tive a mesma dúvida que você, e então eu gerei tudo fora do eclipse, e então comparei os dois arquivos…
É realmente essas coisas que acho massa no estudo da certificação, a gente começa a reparar em detales que trabalhando não da tempo de ver…