Доступ к статической переменной Outer класса из Static Inner class - PullRequest
0 голосов
/ 10 февраля 2019

Я изучаю вложенные классы.Я просто хочу знать, почему я не могу получить доступ к статической переменной внешнего класса из статического внутреннего класса, используя его экземпляр.

class MyListner {
    static String name = "StaticApple";
    String nonStaticName = "NonStaticApple";

    static class InnerMyListner {
        void display(){
            System.out.println("Static variable of outer class: " + name);
        }
    }

    private static final MyListner singleton = new MyListner();

    private MyListner() {

    };

    public static MyListner getInstance() {
        return singleton;
    }
}

public class Results{
    public static void main(String[] args) {
        MyListner.getInstance();

        MyListner.InnerMyListner innerclassO = new MyListner.InnerMyListner();
        innerclassO.display();  // This works
        String staticVariable = innerclassO.name;  // Why doesn't this work?
    }
}

1 Ответ

0 голосов
/ 10 февраля 2019

Вы должны понять, как здесь работает class.InnerMyListner класс является статическим вложенным классом.

Как и в случае методов и переменных класса, статический вложенный класс связан со своим внешним классом.

Хотя статический вложенный класс не может получить доступ к свойствам экземпляра внешнего класса, он может обращаться к статическим свойствам (общим для всех экземпляров), которые находятся внутри области видимости.

Внутри Results вы находитесь вне области видимости для name.
Для более подробного обзора см. Документация Java

...