Конструктор не очень удачно назван.Можно предположить, что он отвечает за создание (конструирование) объекта, но в действительности он отвечает за инициализацию уже существующего объекта.
Объект создан оператором new
.Но этот объект «настроен», чтобы все его поля были заполнены значениями по умолчанию: null, false, 0 (в зависимости от типа).Чтобы сделать такой объект пригодным для использования в нашем приложении, нам нужно правильно его «настроить» (инициализировать), и это задача конструктора.
Но поскольку классы могут расширять другие классы, это необходимоиз конструкторов подкласса выполнять его код только после выполнения конструктора суперкласса (например, чтобы убедиться, что все унаследованные поля правильно инициализированы, чтобы мы могли использовать в нашем конструкторе унаследованные методы, которые фактически используют эти поля суперкласса).Вот почему вызов super(..)
делается явно или неявно в начале каждого конструктора (кроме класса Object
, поскольку он не расширяет другой класс).