Ваш внутренний класс зависит от экземпляра класса Test
. main - это статический метод, поэтому вы не можете создать экземпляр InnerClass
.
Я думаю, что вы хотите объявить свой внутренний класс как static
:
class Test {
static class InnerClass { }
public static void main(String[] args){
InnerClass ic = new InnerClass();
}
}
Подробнее о вложенных классах: http://download.oracle.com/javase/tutorial/java/javaOO/nested.html
Краткое объяснение
В основном есть два типа вложенных классов: «статический вложенный класс» и «внутренний класс»
Статический вложенный класс используется для логической группировки двух классов и может использоваться для увеличения инкапсуляции. Их можно использовать, как и любые другие классы, и, за исключением видимости, они не имеют определенного доступа к полям внешнего класса. Их можно логически создать в статическом контексте.
Внутренний класс (т.е. не статический ) привязан к конкретному экземпляру внешнего класса. Это означает, что вы должны иметь экземпляр внешнего класса для создания экземпляра внутреннего класса. Взгляните на второй фрагмент кода Скаффмана для примера создания экземпляра. Поскольку внутренние классы связаны с экземпляром внешнего класса, они имеют доступ к каждому полю относительно этого конкретного экземпляра.
Надеюсь, теперь все стало понятнее.