为什么不能在(非静态)内部类中使用静态方法?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (12)

为什么我们不能在非静态内部类中使用静态方法?

如果我让内部类静态它的作品。为什么?

提问于
用户回答回答于

由于内部类的实例与其外部类的实例隐式关联,因此它本身不能定义任何静态方法。由于静态嵌套类不能直接引用其封闭类中定义的实例变量或方法,因此它只能通过对象引用来使用它们,因此在静态嵌套类中声明静态方法是安全的。

用户回答回答于

在非静态内部类中允许使用静态方法没有多大意义; 你将如何访问它?如果不通过外部类实例,则无法访问(至少在初始时)非静态内部类实例。没有纯静态的方法来创建一个非静态的内部类。

对于外部类Outer,可以test()像这样访问一个静态方法:

Outer.test();

对于静态内部类Inner,您可以innerTest()像这样访问其静态方法:

Outer.Inner.innerTest();

但是,如果Inner不是静态的,现在就没有纯静态的方法来引用该方法innertest。非静态内部类与他们外部类的特定实例绑定。函数不同于常量,Outer.Inner.CONSTANT因为函数调用Outer.Inner.staticFunction();不会导致函数的引用保证是明确的。假设你有Inner.staticFunction()这个电话getState(),这是在中定义的Outer。如果你试图调用这个静态函数,你现在对Inner类有一个模棱两可的引用。也就是说,你在哪个内部类的实例上调用静态函数?它很重要。请参阅,由于对外部对象的隐式引用,因此没有真正的静态方法来引用该静态方法。。

如果你真的需要静态方法在非静态的内部类上,那么你可能需要重新考虑你的设计。

扫码关注云+社区