繁体   English   中英

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

[英]Java inner classes and static methods or fields

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

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

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

这个设计还是存在问题?

亲切的问候

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM