在显式构造函数调用期间,Java如何在几乎相同的构造函数之间进行区分?#34 ;?

时间:2018-03-08 06:42:25

标签: java constructor constructor-overloading

我正在阅读Java Tutorial并且有一个关于显式构造函数调用的问题。首先,这里是教程中编写的字段和构造函数,以及我添加的另一个构造函数:

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);" line没有指定0的类型。我的问题是,为什么它不会转到我写的第三个构造函数(使用' short'类型)或给出错误。当我打印出对象的' x'值,我总是得到0而且从来没有4. Java如何决定使用' int'?

1 个答案:

答案 0 :(得分:1)

  

在默认构造函数中,“this(0,0,1,1);” line没有指定0的类型

这是一个不正确的陈述。积分数字文字(没有后缀)总是int s(这就是3000000000这样的文字会出现编译错误的原因,因为该值对于int来说太大了。因此,选择了最后一个构造函数 - Rectangle(int x, int y, int width, int height)