В Java имеется возможность определять один класс внутри другого. Такие классы называются вложенными. Вложенный класс имеет доступ ко всем компонентам включающего класса. Обратное утверждение не верно.
Существует два вида вложенных классов – статический и нестатический. При объявлении статического класса используется ключевое слово static. Этот класс не может прямо обращаться к членам включающего класса, а должен это делать через объект. В связи с этим используется редко.
Другой тип вложенного класса это внутренний нестатический класс. Этот класс находится полностью в области видимости включающего класса и может обращаться ко всем его компонентам. Приводимая ниже программа демонстрирует этот тип вложенности.
class Ext // внешний класс Ext
{
int a=4; // объявление и явная инициализация
public int b; // объявление и инициализация 0
void fun_Ext()
{ In ob= new In();
ob.fun_In();
System.out.println("vneshnyi class " + a+ b);
}
class In // вложенный класс In
{
int aa;
public int bb;
void fun_In()
{ System.out.println("vlogenyi class "+ a+ b);
}
}
}
public class start
{
public static void main(String[] args)
{ Ext ob=new Ext();
ob.fun_Ext();
}
}
Класс In известен только в пределах видимости класса Ext, следовательно попытка создать объект класса In, например, в функции main приведет к ошибке.
Вложенные классы могут быть объявлены не только в области влючающего класса, но и так же в пределах любого его блока – методы, циклы и т.д.
Вложенные классы наиболее полезны при обработке событий в апплетах.
Вложенные классы так же могут быть анонимными, не имеющими имен.