Outra duvida de inner classes

1 resposta
D
public class Foo{

    Foo(){ System.out.println("foo"); }

    class Bar{
        Bar(){ System.out.println("bar"); }
        public void go() { System.out.println("go"); }
    }

    void makeBar(){
        (new Bar() { } ).go();
    }

    public static void main(String args[]){
         Foo f = new Foo();
         f.makeBar();
     }

}

pessoal , eu quando eu vi esta questão eu fiquei em duvida com este ponto aqui :

(new Bar() { } ).go();

porque eu nunca tinha visto isso antes...
dai depois testando..eu vi que esse esquema aqui funciona com qualquer classe...

mas eu achei estranho..o porque disso aqui nao funcionar dentro de um metodo da classe encapsuladora por exemplo, onde eu ja possuo uma instancia da mesma... :

new Bar().go(); // sem curly braces..

Obrigado.

valeu!!! :D

1 Resposta

Ironlynx

Essas chaves são um bloco vazio,apenas um “enfeite” no seu programa.vc poderia fazer assim: new Bar(){{{{{}}}}}.go();
que não haveria problema.

Funciona sim.ponha um método qualquer:

void metodo(){ new Bar().go(); } dentro da inner e verás q não terás problemas. Mas para acessá-lo terás q ter instancia.new Bar().m(); no main.
só não coloque new Bar().go(); dentro do go();se não quiser ter uma recursão infinita…hehehe
Ah,repare que Bar b=new Bar(); ou ainda Bar b=new Foo().new Bar(); criados dentro da inner causarão uma recursão infinita.Pq?A instância fará sempre a chamada ao construtor da classe(Foo) q está atada a inner,não sendo possível acessar o construtor da própria inner class.Uma inner sempre estará ligada a sua classe externa.

Criado 6 de abril de 2004
Ultima resposta 8 de abr. de 2004
Respostas 1
Participantes 2