Java如何处理多个构造函数?

时间:2016-04-28 10:06:54

标签: java

如果一个类包含两个构造函数,这些构造函数接受不同类型的参数,如下所示:

script

我的主要问题是: 1)具有调用此类的main的另一个类如何确定要使用哪个构造函数?

如果是这种情况,如果您有两个构造函数,会发生什么: 2)相同类型和数量的参数? 3)相同类型但不同数量的参数?

我意识到跟进问题是你可能永远不会做的事情(也就是凌乱的事情)。我很好奇。

3 个答案:

答案 0 :(得分:2)

  

1)具有调用此类的main的另一个类如何确定   使用哪个构造函数?

编译器通过检查唯一方法签名,遵循与重载静态绑定方法相同的过程。要了解方法签名see this

public static void main(String args[]) {
    double d1 = 0;
    double d2 = 0;
    double d3 = 0;
    double d4 = 0;
    double d5 = 0;
    String img = "";
    Planet p = new Planet(d1, d2, d3, d4, d5, img);// constructor with valid argument set
}
  

2)相同类型和数量的参数?

实际上,在单个类中编写具有相同签名的两个方法/构造函数实际上是不可能的。例如以下代码永远不会编译

Planet(int i) {// compilation error
    return 0;
}
Planet(int j) {// compilation error
    return 0;
}
  

3)相同类型但不同数量的参数?

这是可能的,就像使用不同签名创建/调用方法一样。 e.g。

Planet p1 = new Planet(d1, d2, d3, d4, d5, img);
Planet p2 = new Planet(p1);

答案 1 :(得分:0)

1)具有调用此类的main的另一个类如何确定要使用哪个构造函数?

类不会确定程序员所做的任何事情,并且他通过放置适当的参数来完成它。例如,如果您有2个构造函数public Test (int i)public Test(),当您调用new Test(5)时,它将调用第一个,如果执行new Test(),它将调用第二个。< / p>

如果......怎么办? 2)相同类型和数量的参数?

你做不到。它不会编译。

如果......怎么办? 3)相同类型但不同数量的参数?

与1)中的相同

答案 2 :(得分:0)

要使用的构造函数将根据您传递给它的参数的数量和类型来确定。

在Java中,构造函数和方法签名(标识)由方法名称(显然不适用于构造函数)以及其参数的数量和类型组成。

两个方法(或构造函数)不能具有相同的签名。因此,您不能提供具有相同数量和类型的参数的两个方法或构造函数,这使得JVM只需通过匹配传递的实际参数的数量和类型就可以轻松知道要调用哪个。