java - 同一类中两个具有 int 和 long 参数的构造函数

标签 java constructor

我想测试是否有两个构造函数,其中一个的paramsint,另一个为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,30int 以及 long 类型。那么第二个构造函数有什么问题,为什么它不打印“long 50”。

最佳答案

两个构造函数都适用。如果删除第一个,将使用第二个 - 我们可以将 int 参数传递给 long 参数。

由于两者都适用,编译器会选择最具体的一个。 (int) 版本比 (long) 版本更具体,因为 intlong 的子类型。

这确实有点令人困惑;如果可以的话,避免它。

关于java - 同一类中两个具有 int 和 long 参数的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33535708/

相关文章:

c++ - 如何在初始化列表中创建一个非空的 boost ublas::vector?

java - 通用构造器

java - 在 Layout-File 中膨胀 MapView 时出错

java - 我的类应该是什么类型才能访问类及其扩展的类?

java - 如何在java类和android Activity之间交换数据?

javascript - 在 JavaScript 中创建对象的多个实例时出现错误

C++ - is_default_constructible 是如何实现的?

VS2005 中的 C# : will this() execute the base constructor code for an inherited class?

java - 在PC上序列化,在android手机上反序列化?

java - 如何查询集合的复合元素? (无法为非实体集合创建元素连接)