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