Eventuali duplicati:
Why cant we have static method in an inner class?Perché una classe interna non statica non può avere membri statici (campi e metodi)?
So che la creazione di un oggetto interno di classe non-statico richiede un oggetto esterno classe e l'oggetto interno di classe non statica creato ha automaticamente un riferimento nascosto all'oggetto della classe esterna. Ma perché una classe interna non statica non può avere membri statici? Il progettista Java deve solo disabilitare l'accesso di campi non statici di classe esterna all'interno di un metodo statico della classe interna, avrebbe più senso, non?
Se non ha senso avere membri statici in una classe interna, perché la classe interna può ereditare membri statici ereditando una classe che ha membri statici?
Ho letto anche questo post. Come è menzionato:
classi interne possono ereditare i membri statici che non sono in fase di compilazione costanti anche se non li possono dichiarare. Le classi nidificate che non sono classi interne possono dichiarare membri statici liberamente, in conformità con con le solite regole del linguaggio di programmazione Java.
E 'una convenzione?
Ecco il mio codice:
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() {
};
}
Vedere anche: http://stackoverflow.com/questions/2482327/why-can-we-have-static-final-members-but-cant-have-static-method-in-an-inner-cla – Autar