【发布时间】:2021-09-23 06:58:24
【问题描述】:
这个问题主要是关于正确的 Java 术语。
我正在区分一个 inner class,它绑定到其封闭范围的实例,以及一个非内部的 nested static class,它独立于一个封闭的范围实例。
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
}
};
}
}
这是正确的术语吗?如下所示,所有本地类和所有匿名类也是内部类吗?
【问题讨论】:
-
JLS 8.1.3. Inner Classes and Enclosing Instances "内部类是嵌套类,不是显式或隐式静态的。内部类是以下之一:非显式或隐式静态的成员类( §8.5);非隐式静态的本地类 (§14.3);匿名类 (§15.9.5)" 以及更多解释哪些类是隐式静态的(查看链接)
-
Java Nested Classes 教程提供了对术语的另一种评论:嵌套类是“另一个类中的一个类”。另外:“嵌套类分为两类:非静态和静态。非静态嵌套类称为内部类。声明为静态的嵌套类称为静态嵌套类。” “在块中定义”的类称为本地类。
标签: java inner-classes local-class