Java内部类和静态方法或字段

时间:2015-06-19 22:34:30

标签: java static inner-classes

为什么内部类不能有静态(非最终)字段和方法?

此问题之前已发布,但发布的答案是:它是一个设计决策,或者因为内部类发生在外部类的上下文中,并且不能声明静态方法。

然而,这些答案并没有澄清我的问题。在内部类上允许静态字段和方法会带来什么后果?我的猜测是两个限制都是相关的。由于静态方法需要访问内部类的其他静态方法和非最终静态变量,甚至需要访问外部类(以便能够更改内部状态),这将导致内部类的行为类似于静态类。但是,JVM可以限制从内部类中的静态方法访问内部类中的静态方法和数据。然而,这提出了一个问题:为什么我们不能在内部类中声明静态非最终变量?

这个设计还是存在问题?

亲切的问候

2 个答案:

答案 0 :(得分:0)

在非静态内部类中声明静态变量似乎与创建内部非静态类的意图相矛盾。
如果你声明一些变量和方法是静态的,那么在没有创建类的实例的情况下访问它们是有意义的,如果你声明内部类是非静态的实例类型,那么意图是通过它的实例而不是静态地访问它。如果声明内部类静态,因此将它与外部类分开,则可以将变量和方法声明为静态 你问过如果java允许你在内部非静态类中声明静态方法/字段会有什么后果。好吧可能没有。但它没有意义,因此它是一种设计选择。

答案 1 :(得分:0)

回答为什么...->
内部类对象与外部类对象紧密相关,这意味着没有现有外部类对象就不可能存在内部内部类对象,因此在内部类中定义任何静态变量/方法将无法满足此要求

在静态嵌套类的情况下->内部类对象与外部类对象没有强烈关联