【发布时间】:2019-10-19 22:34:58
【问题描述】:
我知道 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 中,那么它们应该(或可以)以这种方式访问
outerClassInstance.innerClass.member
我想错了吗?内部类的设计方式有什么特别的原因吗?
希望我很清楚。对不起我的英语不好。
【问题讨论】:
-
因为静态成员从不依赖实例。
-
我知道类中的静态变量应该(并且将)永远不会依赖于该类的实例。但我不明白为什么内部类中的静态变量不应该依赖于封闭类(或外部类)的实例。@csabinho 你能详细说明一下吗。提前谢谢
-
好吧,为什么要这样呢?你能给我举个例子,内部类的静态变量依赖于外部类的实例吗?
-
如果是这样,那么内部类的所有实例都有可能拥有一个公共变量,他们可以修改该变量并将该变量用于某种目的(如同步),而无需触及外部类中的字段这使得代码更紧凑。不是吗?
-
我不太明白。你能在你的问题中编辑一个代码示例吗?
标签: java inner-classes