可能重复:
为什么我们不能在内部类中有静态方法?
我知道创建非静态内部类对象需要一个外部类对象,并且创建的非静态内部类对象自动具有对外部类对象的隐藏引用。但是为什么非静态内部类不能有静态成员呢?Java 设计者只需要禁止访问内部类的静态方法中的非静态外部类字段,这会更有意义,不是吗?
如果内部类中有静态成员没有意义,为什么内部类可以通过继承具有静态成员的类来继承静态成员?
我也读过这篇文章。如前所述:
内部类可以继承不是编译时常量的静态成员,即使它们可能没有声明它们。不是内部类的嵌套类可以按照 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() {
};
}