Что входит в сигнатуру класса в Java?

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

Ответ

Сигнатура класса (class signature) — это уникальный идентификатор класса, который определяет его внешний контракт (API) без раскрытия внутренней реализации. Она включает элементы, видимые извне и необходимые для использования класса.

Элементы сигнатуры класса:

  1. Модификаторы доступа: public, protected, private или package-private (по умолчанию).
  2. Ключевые слова: abstract, final, strictfp.
  3. Имя класса.
  4. Параметры типа (Generics): Например, <T>, <K, V extends Comparable>.
  5. Родительский класс (наследование): Ключевое слово extends и имя суперкласса (если есть).
  6. Реализуемые интерфейсы: Ключевое слово implements и список интерфейсов.

Что НЕ входит в сигнатуру: тело класса, поля, методы, конструкторы, инициализаторы.

Примеры:

// Сигнатура: public final class UtilityClass
public final class UtilityClass { /* ... */ }

// Сигнатура: abstract class Shape implements Drawable
abstract class Shape implements Drawable { /* ... */ }

// Сигнатура: public class Repository<T extends Entity> extends AbstractDAO<T> implements Serializable
public class Repository<T extends Entity> extends AbstractDAO<T> implements Serializable {
    // Поля и методы НЕ являются частью сигнатуры класса.
    private List<T> storage;
    public void save(T item) { ... }
}

Практическое значение: Сигнатура класса используется компилятором для проверки типов, разрешения перегрузки методов и обеспечения правильности наследования. Изменение сигнатуры (например, удаление интерфейса) является ломающим изменением (breaking change) для клиентского кода.