我已经知道Java中的内部类不能具有静态成员,除非并且直到将它们声明为final为止。但是从理论上讲,在本地类中声明静态成员不应该吗?
例如
public class OuterClass
{
class innerClass
{
public static int i = 1;
// inner class code goes here
}
}
我知道内部类的标准初始化是这样发生的:
OuterClass outerClass = new OuterClass();
OuterClass.innerClass innerclassInstance = outerClass.new innerClass();
但是为什么不这样呢?
OuterClass outerClass = new OuterClass();
outerClass.innerClass innerclassInstance = new outerClass.innerClass();
创建OuterClass的实例时,它还包含innerClass的副本。因此,如果允许innerClass中存在静态成员(只是静态成员而不是final成员),则应该(或可以通过这种方式)访问它们
outerClassInstance.innerClass.member
我在想错方向吗?为什么以内部类的方式设计内部类有什么特别的原因?
希望我很清楚。对不起,我的英语不好。
但是从理论上讲,在本地类中声明静态成员不应该吗?
内部类与其外部类的对象隐式关联,因此InnerClass类的存在完全取决于OuterClass类的每个封闭对象。
假设,您没有将'i'声明为final,而是创建OuterClass类的实例a和b,这两个实例彼此独立。我们可以设置:
OuterClass a = new OuterClass();
OuterClass.InnerClass a1 = a.new InnerClass();
a1.i = 9;
OuterClass b = new OuterClass();
OuterClass.InnerClass b1 = b.new InnerClass();
b1.i = 18;
Hmm,具有两个不同值的静态变量,并行存在,并且彼此独立(因为a和b彼此独立)。
这不可能发生,因为静态变量本质上是全局变量。 InnerClass类的所有实例必须共享相同的静态变量。
但是为什么不这样呢?
OuterClass outer = new OuterClass(); //I modified the variable name to avoid confusion
outer.InnerClass innerclassInstance = new outer.InnerClass();
按照惯例,
Type name = new Type();
,因此外部(名称)无法解析为类型。
您可以这样做:
OuterClass.InnerClass innerclassInstance = new OuterClass().new InnerClass();
希望我的回答可能对您有帮助。