Ваш вложенный класс (который не является подклассом, кстати) не помечен как статический, поэтому он является внутренним классом, который требует экземпляра класс кодирования (JavaApp1) для его создания.
Опции:
JavaApp1
вообще) JavaApp1
как «охватывающий экземпляр»: GenTest x = new JavaApp1().new GenTest();
Лично я бы пошел с второй подход - вложенные классы в Java имеют несколько странностей вокруг них, поэтому я бы использовал классы верхнего уровня, если у вас нет веских причин сделать его вложенным. (Окончательный вариант особенно беспорядочен, IMO.)
Дополнительную информацию о внутренних классах см. В разделе 8.1.0 JLS .