Как конструктор выполняется?

Я делаю некоторые изменения из слайдов лекции, и это говорит, что конструктор выполняется следующим образом:

  1. Если конструктор запускает с этого, рекурсивно выполните обозначенного конструктора, то перейдите к шагу 4.

  2. Вызовите явно или неявно обозначенный конструктор суперкласса (если этот класс не java.lang.Object).

  3. Инициализируйте поля объекта в порядке, в котором они были объявлены в этом классе.

  4. Выполните остальную часть тела этого конструктора.

То, что я не понимаю, - то, что конструктор никогда не может "запускать" с этого, потому что, даже если это не формирует иерархии/отношений класса затем супер () вставляется по умолчанию.

Как это согласовалось бы с описанием выше?

6
задан Null 14 July 2015 в 19:03
поделиться

3 ответа

Конструктор (для каждого класса, кроме java.lang.Object) должен начинаться либо с «super ()», чтобы вызвать конструктор его суперкласса, либо с «this ()» , чтобы вызвать другой конструктор того же класса. Если вы не включите ни один из них в свой конструктор, компилятор вставит вызов super (). Для конструктора нормально начинать с вызова другого конструктора в том же классе, если в конечном итоге вызывается конструктор в классе, который вызывает конструктор суперкласса.

8
ответ дан 9 December 2019 в 20:40
поделиться

Я не думаю, что вы правы, или я не понимаю в чем проблема. Из Спецификации языка Java :

Если тело конструктора не начинается с явного конструктора вызов и конструктор заявленное не является частью изначального class Object, затем конструктор тело неявно предполагается компилятор, чтобы начать с суперкласса вызов конструктора "super ();", вызов конструктора своего прямой суперкласс, который не принимает аргументы.

Таким образом, конструктор может начинаться с this (...) , который вызывает другой конструктор того же класса. Только когда вызывается конструктор, который не начинается ни с this (...), ни с super (...), super () вызывается автоматически.

Я бы сказал, что после создания объекта был вызван super (...) (если класс не java.lang.Object).

2
ответ дан 9 December 2019 в 20:40
поделиться

здесь более или менее практический пример использования this (...)

public class Car {

    private final int numberOfDoors;

    public Car(int doors) {
        numberOfDoors = doors;
    }

    public Car() {
        this(4);    // default is 4 doors, calls the constructor above
    }
}
2
ответ дан 9 December 2019 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: