L'accès externe aux membres de la classe à partir de l'intérieur d'un intérieur classe étendant de l'extérieur de la classe elle-même

Dans l'extrait de code montré ci-dessous, un intérieur de classe hérite d'un extérieur de la classe elle-même.

package test;

class TestInnerClass {

    private String value;

    public TestInnerClass(String value) {
        this.value = value;
    }

    private String getValue() {
        return value;
    }

    public void callShowValue() {
        new InnerClass("Another value").showValue();
    }

    private final class InnerClass extends TestInnerClass {

        public InnerClass(String value) {
            super(value);
        }

        public void showValue() {
            System.out.println(getValue());
            System.out.println(value);
        }
    }
}

public final class Test {

    public static void main(String[] args) {
        new TestInnerClass("Initial value").callShowValue();
    }
}

La seule instruction à l'intérieur de la main() méthode (le dernier extrait) affecte la valeur Initial value pour le domaine privé value de la TestInnerClass classe, puis appelle la callShowValue() méthode.

La callShowValue() méthode provoque une autre chaîne - Another value être pour le domaine privé value de la TestInnerClass classe avant d'invoquer le showValue() méthode de InnerClass l'extension de TestInnerClass.

En conséquence, les deux instructions suivantes à l'intérieur de la showValue() méthode,

System.out.println(getValue());
System.out.println(value);

doit afficher,

Une autre valeur

Une autre valeur

Mais ils affichent,

Valeur initiale

La valeur initiale de la

Pourquoi cela se produit?

OriginalL'auteur Tiny | 2013-10-13