Статический метод, возвращающий внутренний класс

Я действительно не понимаю, почему метод getMyClass2 ниже не может быть статическим, почему он не является допустимым кодом Java?

public class MyClass
{
    private class MyClass2
    {
        public String s1 = "";
        public String s2 = "";
    }

    private MyClass2 myClass2;

    private static MyClass2 getMyClass2()
    {
        MyClass2 myClass2 = new MyClass2();
        return myClass2;
    }

    public MyClass()
    {
        myClass2 = getMyClass2();
    }
}

Ответ 1

Вы должны сказать, что внутренний класс является статическим, поскольку нестатический привязан к экземпляру, поэтому он не может быть возвращен из статического метода

public class MyClass
{
    private static class MyClass2
    {
        public String s1 = "";
        public String s2 = "";
    }

    private MyClass2 myClass2;

    private static MyClass2 getMyClass2()
    {
        MyClass2 myClass2 = new MyClass2();
        return myClass2;
    }

    public MyClass()
    {
        myClass2 = getMyClass2();
    }
}

Ответ 2

Внутренние экземпляры (нестатические) всегда связаны с экземпляром класса, в котором они содержатся. Статический метод будет вызываться без ссылки на конкретный экземпляр MyClass, поэтому, если он создал экземпляр MyClass2, для него не будет экземпляра MyClass.

Ответ 3

Да,

потому что 99% времени, когда вы не хотите, чтобы они были статичными, D

Статический "вложенный" класс - это не что иное, как класс "верхнего уровня", который определяется внутри другого класса. Если статический класс MyClass2 в приведенном выше примере будет общедоступным, вы можете просто сказать новый MyClass.MyClass2(); В случае нормального "внутреннего класса" вы хотели бы сказать это объекту, а не классу MyClass: MyClass some = new MyClass(), а затем что-то вроде new some.MyClass2() (я забыл точный синтаксис).

Привет