为什么非静态内部类不能具有静态成员(字段和方法)?
可能的重复:
为什么我们不能在内部类中使用静态方法?
我知道创建非静态内部类对象需要一个外部类对象,并且创建的非静态内部类对象会自动对外部类的对象进行隐藏引用。但是,为什么非静态内部类不能具有静态成员呢?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() {
};
}