【问题标题】:How does static inner class can access all the static data members and static member function of outer class?静态内部类如何访问外部类的所有静态数据成员和静态成员函数?
【发布时间】:2016-07-13 07:02:03
【问题描述】:

我观察到静态内部类可以访问外部类的所有静态数据成员和成员函数。 java是怎么做到的?

class StaticClass{

    static int x=10;

    static void show() {
        System.out.println("show");
    }

    public static void main(String[] args) {
        InnerStatic i = new InnerStatic();
        i.display();
    }

    static class InnerStatic {

        static void display() {
            System.out.println(x);
            show();
        }
    }
}

【问题讨论】:

  • 因为它是一个内部类;非静态内部类可以访问其外部类的所有实例成员。

标签: java


【解决方案1】:

Java 中的静态成员是在每个类的基础上分配的。由于任何静态成员的每个类项只有一个,Java 知道它们中的每一个在运行时的位置。

因此,这里唯一的问题是从访问控制的角度来看项目的可见性。在这里,Java 也没有问题,因为 Java 编译器知道从哪里可以访问每个静态项。

在您的示例中,InnerStatic.display 可以像 StaticClass.main 一样访问 StaticClass.show。事实上,任何与StaticClass在同一个包中的方法都可以这样做:

StaticClass.show(); // this will compile from anywhere

InnerStatic 的优点是编译器知道“周围”类,所以当它没有找到InnerStatic.show 时,它会继续查找,并在StaticClass 中找到方法。

【讨论】:

    【解决方案2】:

    在您的示例中,内部/外部与它无关。您的字段和方法都是 public 或包私有(即没有可见性修饰符),并且可以被同一包中的任何类访问。

    【讨论】:

      【解决方案3】:

      static 方法可以访问任何其他类的 static 字段和方法,除非访问修饰符阻止它。

      它们的访问方式与在同一个类中访问方法和字段的方式相同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-02
        • 2018-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多