我想测试是否有两个构造函数
,其中一个的params
为int
,另一个为long
。调用时会执行哪一个?
我已经尝试过:
public class OverloadingExample {
public OverloadingExample(int i, int j) {
// TODO Auto-generated constructor stub
System.out.println("Hello"+" "+(i+j));
}
public OverloadingExample(long i, long j) {
// TODO Auto-generated constructor stub
System.out.println("long"+(i+j));
}
public static void main(String[] args) {
OverloadingExample duplicacyInHashMap = new OverloadingExample(20, 30);
System.out.println(duplicacyInHashMap);
}
}
输出:
Hello 50
OverloadingExample@6d06d69c
我相信这两个构造函数都被调用,因为 params 20,30
是 int
以及 long
类型。那么第二个构造函数有什么问题,为什么它不打印“long 50”。
最佳答案
两个构造函数都适用。如果删除第一个,将使用第二个 - 我们可以将 int
参数传递给 long
参数。
由于两者都适用,编译器会选择最具体的一个。 (int)
版本比 (long)
版本更具体,因为 int
是 long
的子类型。
这确实有点令人困惑;如果可以的话,避免它。
关于java - 同一类中两个具有 int 和 long 参数的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33535708/