Какую роль играют классы в системе типов языка Java?

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

Ответ

В Java классы являются основными строительными блоками системы типов. Они определяют новые типы данных, которые используются для:

  1. Статической проверки типов: Компилятор проверяет корректность операций (вызов методов, присваивание) на основе типов, определенных классами.
  2. Создания объектов: Класс выступает в роли шаблона ("чертежа") для создания экземпляров (объектов).
  3. Инкапсуляции состояния и поведения:
    • Поля (fields) определяют состояние объекта (данные).
    • Методы (methods) определяют его поведение (операции).

Пример, демонстрирующий роль класса как типа:

// 1. ОПРЕДЕЛЕНИЕ ТИПА: Класс `Person` определяет новый тип данных.
class Person {
    // Состояние (поля)
    private String name;
    private int age;

    // Поведение (методы)
    public void greet() {
        System.out.println("Hello, my name is " + name);
    }

    public boolean isAdult() {
        return age >= 18; // Логика, основанная на состоянии
    }
}

// 2. ИСПОЛЬЗОВАНИЕ ТИПА:
public class Main {
    public static void main(String[] args) {
        // Создание объекта типа `Person`. Тип переменной `person1` - `Person`.
        Person person1 = new Person();
        person1.name = "Alice";
        // Компилятор знает, что у типа `Person` есть метод `greet()`.
        person1.greet(); // Вывод: Hello, my name is Alice

        // Система типов предотвращает ошибки:
        // String str = person1; // ОШИБКА КОМПИЛЯЦИИ: несовместимые типы.
    }
}

Классы также являются основой для ключевых принципов ООП: наследование (расширение одного типа другим), полиморфизм и абстракция.