Вы объявили класс Thing
как нестатический внутренний класс.Это означает, что он должен быть связан с экземпляром класса Hello
.
В вашем коде вы пытаетесь создать экземпляр Thing
из статического контекста.Это то, на что жалуется компилятор.
Есть несколько возможных решений.Какое решение использовать, зависит от того, чего вы хотите достичь.
Вывести Thing
из класса Hello
.
Изменить Thing
быть вложенным классом static
.
static class Thing
Создать экземпляр из Hello
перед созданием экземпляра Thing
.
public static void main(String[] args)
{
Hello h = new Hello();
Thing thing1 = h.new Thing(); // hope this syntax is right, typing on the fly :P
}
Последнее решение ( нестатический вложенный класс) будет обязательным, если любой экземпляр Thing
зависит от экземпляра Hello
, который будетосмысленный.Например, если бы у нас было:
public class Hello {
public int enormous;
public Hello(int n) {
enormous = n;
}
public class Thing {
public int size;
public Thing(int m) {
if (m > enormous)
size = enormous;
else
size = m;
}
}
...
}
любая грубая попытка создать объект класса Thing
, например:
Thing t = new Thing(31);
, была бы проблематичной, посколькубыть очевидным enormous
значением для проверки 31 против него.Экземпляр h
внешнего класса Hello
необходим для предоставления этого значения h.enormous
:
...
Hello h = new Hello(30);
...
Thing t = h.new Thing(31);
...
Поскольку это не означает Thing
, если у него нет Hello
.
Для получения дополнительной информации о вложенных / внутренних классах: Вложенные классы (Учебные руководства по Java)