Java Language Accéder à la classe externe à partir d'une classe interne non statique


Exemple

La référence à la classe externe utilise le nom de la classe et this

public class OuterClass {
    public class InnerClass {
        public void method() {
            System.out.println("I can access my enclosing class: " + OuterClass.this);
        }
    }
}

Vous pouvez accéder directement aux champs et aux méthodes de la classe externe.

public class OuterClass {
    private int counter;

    public class InnerClass {
        public void method() {
            System.out.println("I can access " + counter);
        }
    }
}

Mais en cas de collision de noms, vous pouvez utiliser la référence de classe externe.

public class OuterClass {
    private int counter;

    public class InnerClass {
        private int counter;
        
        public void method() {
            System.out.println("My counter: " + counter);
            System.out.println("Outer counter: " + OuterClass.this.counter);
            
            // updating my counter
            counter = OuterClass.this.counter;
        }
    }
}