Ви оголосили клас 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)