两个具有相同编号的构造函数。参数但不同的数据类型

时间:2017-11-26 06:54:13

标签: java multiple-constructors

在我运行以下代码时,我得到called作为输出,我想知道为什么不called new。由于1属于shortint范围。

public class MyClass {

        private int x;

        public MyClass(){
            this(1);
        }

        public MyClass(int x){
            System.out.println("called");
            this.x = x;
        }

       public MyClass(short y){
            System.out.println("called new");
            this.x = y;
        }

        public static void main(String args[]) {
        MyClass m = new MyClass();
            System.out.println("hello");
        }
    }

2 个答案:

答案 0 :(得分:5)

1int字面值,因此选择了MyClass(int x)

即使您删除MyClass(int x)构造函数,也不会选择MyClass(short y)。您会收到编译错误,因为1不是short

您必须将1投反对短this((short)1); - 才能选择MyClass(short y)

答案 1 :(得分:0)

作为对其他人的补充,我可以建议您在使用相同的文字初始化其他类型的变量时检查调用哪些构造函数:

short s = 1;
int i = 1;

然后检查调用MyClass的构造函数,并使用上述参数调用它们。