Warum kann eine nicht-statische innere Klasse keine statischen Elemente (Felder und Methoden) haben? [Duplikat]

Mögliche Duplikate:
Warum können wir in einer inneren Klasse keine statische Methode haben?

Ich weiß, dass für die Erstellung eines nicht statischen Objekts der inneren Klasse ein Objekt der äußeren Klasse erforderlich ist und dass das erstellte nicht statische Objekt der inneren Klasse automatisch einen versteckten Verweis auf das Objekt der äußeren Klasse enthält. Aber warum kann eine nicht-statische innere Klasse keine statischen Mitglieder haben? Der Java-Designer muss nur den Zugriff von nicht statischen Feldern der äußeren Klasse innerhalb einer statischen Methode der inneren Klasse verbieten, es wäre sinnvoller, nicht?

Wenn es keinen Sinn macht, statische Mitglieder in einer inneren Klasse zu haben, warum kann die innere Klasse statische Mitglieder erben, indem sie eine Klasse mit statischen Mitgliedern erbt?

ich lese dasPost auch. Wie gesagt:

Innere Klassen erben möglicherweise statische Member, die keine Konstanten zur Kompilierungszeit sind, obwohl sie diese möglicherweise nicht deklarieren. Geschachtelte Klassen, die keine inneren Klassen sind, können statische Member gemäß den üblichen Regeln der Java-Programmiersprache frei deklarieren.

Ist es eine Konvention?

Hier ist mein Code:

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() {
    };
}

Antworten auf die Frage(3)

Ihre Antwort auf die Frage