Какие элементы можно определить внутри класса в Java?

«Какие элементы можно определить внутри класса в Java?» — вопрос из категории ООП, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В теле класса Java можно определить следующие элементы:

1. Поля (Fields) — переменные, хранящие состояние объекта.

private String name; // поле экземпляра
private static int count; // статическое поле класса

2. Методы (Methods) — определяют поведение объекта или класса.

public void doSomething() {}
public static void utilityMethod() {}

3. Конструкторы (Constructors) — специальные методы для инициализации новых объектов.

public MyClass(String param) { ... }

4. Вложенные классы (Nested Classes)

  • Статические вложенные классы (static class) — не имеют доступа к нестатическим членам внешнего класса.
  • Внутренние классы (inner classes) — имеют доступ к полям и методам внешнего объекта.
  • Локальные классы (local classes) — определены внутри метода.
  • Анонимные классы (anonymous classes) — классы без имени, часто для реализации интерфейсов.

5. Блоки инициализации (Initializer Blocks)

{ /* блок инициализации экземпляра */ }
static { /* статический блок инициализации */ }

6. Другие типы

  • Интерфейсы (Interfaces) — начиная с Java 8, можно объявлять вложенные интерфейсы.
  • Перечисления (Enums)

Полный пример:

class Outer {
    // Поле
    private int value;
    // Конструктор
    public Outer(int v) { this.value = v; }
    // Метод
    public int getValue() { return value; }
    // Вложенный статический класс
    static class Nested {}
    // Внутренний класс
    class Inner { void print() { System.out.println(value); } }
    // Вложенный enum
    enum Status { ACTIVE, INACTIVE }
    // Статический блок
    static { System.out.println("Class loaded"); }
}