Duplicar posible:
Why cant we have static method in an inner class?¿Por qué una clase interna no estática no puede tener miembros estáticos (campos y métodos)?
Sé que la creación de un objeto de la clase interna no estática requiere un objeto de clase exterior y el objeto de la clase interna no estático creado automáticamente tiene una referencia oculta al objeto de la clase externa. Pero ¿por qué una clase interna no estática puede tener miembros estáticos? El diseñador de Java solo tiene que rechazar el acceso de campos de clases externas no estáticas dentro de un método estático de la clase interna, tendría más sentido, ¿no?
Si no tiene sentido tener miembros estáticos en una clase interna, ¿por qué la clase interna puede heredar miembros estáticos al heredar una clase que tiene miembros estáticos?
He leído esto post también. Como se menciona:
Las clases internas pueden heredar los miembros estáticos que no son en tiempo de compilación constantes a pesar de que no pueden declarar ellos. Las clases anidadas que no son clases internas pueden declarar miembros estáticos libremente, de acuerdo con con las reglas habituales del lenguaje de programación Java.
¿Es una convención?
Aquí está mi código:
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() {
};
}
Ver también: http://stackoverflow.com/questions/2482327/why-can-we-have-static-final-members-but-cant-have-static-method-in-an-inner-cla – Autar