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

可能重复:
为什么我们在内部类中没有静态方法?

我知道创建一个非静态内部类对象需要一个外部类对象,而创建的非静态内部类对象自动拥有一个对外部类对象的隐藏引用。 但为什么非静态内部类不能有静态成员呢? Java设计者只需要禁止在内部类的静态方法内访问非静态外部类字段,它会更有意义,非?

如果在内部类中使用静态成员没有意义,为什么内部类可以通过inheritance具有静态成员的类来inheritance静态成员?

我也读了这篇文章 。 如上所述:

内部类可以inheritance非编译时常量的静态成员,即使它们可能不会声明它们。 不是内部类的嵌套类可以根据Java编程语言的通常规则自由地声明静态成员。

这是一个惯例吗?

这是我的代码:

public class OuterClass { private int outerClassField; public void doSomethingOuterClass() { outerClassField = 1; } public static void doSomethingStaticOuterClass() { // outerClassField = 2; // Error: Because static method cannot access an specific object's field } public class InnerClass extends ClassWithStaticField { // Error: Why a non-static inner class cannot have static fields ? // public static int innerClassStaticField = 1; public void doSomethingInnerClass() { outerClassField = 3; staticField = 1; } // Error: Why a non-static inner class cannot have static methods ? // public static void doSomethingStaticInnerClass() { // outerClassField = 4; // } } public static void main(final String[] args) { // If it does not make sense to have static members in an inner class, why inner class can inherit statis members by inheriting a class who has static // members? OuterClass.InnerClass.staticField = 1; OuterClass.InnerClass.staticMethod(); } } class ClassWithStaticField { public static int staticField; public static void staticMethod() { }; } 

从技术上讲,我不知道为什么语言限制内部类使用静态元素的任何原因。 可以使用普通类来模拟非静态内部类,该普通类将(以前)封闭的实例作为构造函数的参数。 当然,在可见性规则和可见性范围方面存在许多细微差别。

我认为这是一个语言设计决策,主要是因为非静态内部类中的静态是令人困惑和不直观的访问(Outer.Inner.StaticMember)。

1. Non-static inner class instance/object与其Outer Classinstance/object (即封闭类)相关联。

2. Non-static inner class整个主体 不在静态范围内 ,因此您不能在其中拥有静态成员。

3. non-static inner class中的Instance variablesmethods相对于封闭类的实例 ,因此与对象相关, 静态不适用于它们 (即内部类),

4.当我们创建一个非静态 inner classInstance时,我们需要一个Object of Outer enclosing class内部 non-static class具有对其outer enclosing class隐式引用

例如:

 Outer o = new Outer(); Outer.Inner i = o.new Inner(); 

在非静态内部类中提供静态方法是没有意义的。 您可以在外部类中使用非静态方法吗?