Как Java различает почти идентичные конструкторы во время "явного вызова конструктора"?

Я читал Учебник по Java и у меня был вопрос о явном вызове конструктора. Прежде всего, вот поля и конструкторы, как написано в руководстве, плюс еще один конструктор, который я добавил:

private int x, y;
private int width, height;

public Rectangle() {
    this(0, 0, 1, 1);
}

public Rectangle(int width, int height) {
    this(0, 0, width, height);
}

public Rectangle(short x, short y, int width, int height) {
    this.x = (int) x+4;
    this.y = (int) y+4;
    this.width = width;
    this.height = height;
}

public Rectangle(int x, int y, int width, int height) {
    this.x = x;
    this.y = y;
    this.width = width;
    this.height = height;
}

В конструкторе по умолчанию "this(0,0,1,1);" В строке не указываются типы нулей. Мой вопрос: почему он не идет к третьему конструктору, который я написал (с "короткими" типами), или не дает ошибок. Когда я распечатываю значение "x" объекта, я всегда получаю 0 и никогда 4. Как Java решает пойти с "int"?

1 ответ

Решение

В конструкторе по умолчанию "this(0,0,1,1);" строка не указывает типы 0

Это неверное утверждение. Целочисленные числовые литералы (без суффикса) всегда ints (вот почему такой литерал, как 3000000000 будет ошибка компиляции, так как это значение слишком велико для int). Поэтому последний конструктор - Rectangle(int x, int y, int width, int height) - выбран.

Другие вопросы по тегам