NomeDaClasse.this [RESOLVIDO]

Alguém pode me explicar como a chamada “NomeDaClasse.this…” funciona? Por exemplo, no código abaixo:

[code] public class Car {

class Engine {
        Engine(){ Car.this.drive();}
}

public static void main(String[] args) {
  new Car().go();
}

void go() {
new Engine();
}

void drive() { System.out.println(“hi”); }
}[/code]

Eu não entendo o que ocorre exatamente na chamada “Car.this.drive()”…

a instrução NomeDaClasse.this quer dizer que vc poderá acessar um membro ou método da instancia atual da sua classe…

Ainda não entendi direito vmsb11… :frowning: Tipo, o Car referencia a classe. E Car.this ? O que isso significa exatamente?

Thiago fiz uma pequena mudança pra vc entender melhor olha só:

[code]public class Car {

String nome;

 class Engine {  
         Engine(){ System.out.println(Car.this.nome);}  
    }  
   
    public static void main(String[] args) {  
      
      new Car().go(); // Para essa instancia this.nome é null
      //  ok? Seria o mesmo que new Car().nome;
      
      Car car = new Car();
            
      car.nome = "everton"; // Com essa instancia this.nome
      // recebeu "everton" ok? Seria o mesmo que car.nome;
      
      Car.Engine eg = car.new Engine();
    }  
   
   void go() {  
     new Engine();  
   }  

}[/code]

Como dentro de um método statico temos que instanciar dessa forma a InnerClass:

Car car = new Car(); car.nome = "everton"; Car.Engine eg = car.new Engine(); // o this que é usado equivale á o mesmo que a variavel "car"

E nesse caso:

ok?

Presta atenção no que ocorre:

[code]public class Carro {
public class Motor {
public void turnOn() {
System.out.println("Ligando o motor " + this.toString() + " do " + Carro.this.toString());
System.out.println(“Vruummm”);
}
public String toString() {
return “Turbo V8”;
}
}

private Motor motor = new Motor();

public void ligar() {
motor.turnOn();
}

public String toString() {
System.out.println(“Dodge”);
}

public static void main(String args[]) {
new Carro().ligar(); //Saída: “Ligando o motor Turbo V8 do Dodge”
}
}[/code]

Note que na classe motor, se usassemos só this, estariamos falando do this do motor. Usar Carro.this, faz com que eu veja o this do carro. Por isso, essa notação só faz sentido no texto de uma classe interna, querendo acessar o this da externa que a agrega. E, claro, essa classe interna não pode ser estática.

humm, perfeito! Agora eu entendi! :thumbup:

Muito obrigado!!! :smiley:

Oi,

Você pode adotar this como uma referencia de sua janela ou classe.

Carro.this -> Ou seja, você está utilizando uma referencia da classe carro.

Tchauzin!