1

这个问题主要是关于正确的 Java 术语。

我正在区分与封闭范围实例相关的内部类和独立于封闭范围实例的非内部嵌套静态类。

public class Example {
 class Inner {
     void f1() {System.out.println(Example.this); } // Inner class can access Example's this
 }
 static class StaticClass {
     void f1() {System.out.println(this); } // Static nested class - Only its own this
 }

 public static void main(String[] args) {
 }
 void f1() {
     int local=0;
     class Local {
         void f2() {
             System.out.println(Example.this); // Local class - can access Example.this
             System.out.println(local); // can access local
         }
     }
     Runnable r = new Runnable() { 
         @Override
        public void run() {
             System.out.println(Example.this); // Anonymous local class can access Example.this
             System.out.println(local); // can access local 
        }
     };
 }
}

这是正确的术语吗?如下所示,所有本地类和所有匿名类也是内部类吗?

4

2 回答 2

2

根据 Java 语言规范:

  • 匿名类始终是内部类(第 8.1.3 节);它永远不是静态的(§8.1.1、§8.5.1)。( 15.9.5 )
  • 所有本地类都是内部类(§8.1.3)。( 14.3 )
于 2021-09-23T07:07:17.933 回答
1
  • 嵌套类是其声明出现在另一个类或接口声明的主体中的任何类。嵌套类可以是成员类、本地类或匿名类。

  • 内部类是一个嵌套类,它不是显式或隐式静态的。内部类可以指封闭类实例、局部变量和类型变量。

  • 本地类和匿名类不能是静态的,所以它们是内部类。

因此,class Inner嵌套,成员和内部, static class StaticClass嵌套,成员但不是内部,因为它是显式静态的。

于 2021-09-23T07:48:56.037 回答