Статический метод, возвращающий внутренний класс
Я действительно не понимаю, почему метод 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() (я забыл точный синтаксис).
Привет