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"
[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.