java - 从静态内部类访问外部类的静态变量

标签 java static inner-classes

我正在学习嵌套类。我只是想知道为什么我无法使用静态内部类的实例访问外部类的静态变量。

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?
    }
}

最佳答案

您必须了解class(es)在这里是如何工作的。 InnerMyListner 类是一个静态嵌套类。

As with class methods and variables, a static nested class is associated with its outer class.

虽然静态嵌套类无法访问外部类的实例属性,但它可以访问可见范围内的静态属性(由所有实例共享) .

结果内,您超出了name的可见范围。
有关更深入的概述,请参阅Java documentation

关于java - 从静态内部类访问外部类的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54616986/

相关文章:

performance - 使用静态方法与实例化包含方法的类的性能

c++ - Visual Studio 2012 中的智能感知 : No members available for Inner classes in class template?

java - ListView:setvisibility() 强制刷新所有行

java - Spring Data JPA 存储库 Multi-Tenancy 单模式技术

java - Java 面板上的错误事件

c++ - STL 静态常量成员定义

java - TableViewer 中字段之间的制表符

Java:无法为类递增静态整数

c++ - 无效使用非静态数据成员 'linkedList<int>::dummyNode' c++

java - 匿名内部类中的 NullPointerException