при реализации внутреннего класса нужно ли мне объявлять его атрибуты и методы, т.е. public, private, protected?
Это полностью зависит от того, как вы хотели, чтобы внутренний класс вел себя.По умолчанию внутренний класс нестатичен:
public class Example1
{
int a;
public class Example2
{
int b;
void test () {}
}
}
Нестатический внутренний класс может быть создан только внутри нестатического метода внешнего класса.Это связано с тем, что каждый экземпляр нестатического внутреннего класса должен быть связан с экземпляром внешнего класса.В некотором смысле, каждый экземпляр нестатического внутреннего класса существует «внутри» экземпляра внешнего класса.С одним экземпляром внешнего класса может быть связано более одного экземпляра внутреннего класса.
Поскольку экземпляр нестатического внутреннего класса имеет связанный экземпляр внешнего класса, методы внутреннего класса могут напрямую обращаться к любому из членов (полей или методов) экземпляра внешнего класса.Например, метод теста, определенный выше, может напрямую обращаться к a и b
Класс, определенный в другом классе, называется вложенным классом.Как и другие члены класса, вложенный класс может быть объявлен статическим или нет.Нестатический вложенный класс называется внутренним классом.Экземпляр внутреннего класса может существовать только внутри экземпляра его включающего класса и имеет доступ к членам этого включающего класса, даже если они объявлены закрытыми.В следующей таблице показаны типы вложенных классов:
Типы вложенных классов Тип Область действия Внутренний статический член вложенного класса нет внутреннего [нестатического] члена класса да локальный класс локальный да анонимный класс только в той точке, где он определенда