Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java如何处理多个构造函数?_Java - Fatal编程技术网

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

Java如何处理多个构造函数?,java,Java,如果一个类包含两个接受不同类型参数的构造函数,如下所示: public class Planet { public double xxPos; //its current x position public double yyPos; //its current y position public double xxVel; //its current veolicity in the x direction public double yyVel; //its curr

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

public class Planet {
   public double xxPos; //its current x position
   public double yyPos; //its current y position
   public double xxVel; //its current veolicity in the x direction
   public double yyVel; //its current veolicity in the y direction
   public double mass; //its mass
   public String imgFileName; //The name of an image in the images directory that depicts the planet

   // constructor is like __init__ from python, this sets up the object when called like: Planet(arguments)
   public Planet(double xP, double yP, double xV, double yV, double m, String img) {
      xxPos = xP;
      yyPos = yP;
      xxVel = xV;
      yyVel = yV;
      mass = m;
      imgFileName = img;

   }

   // second constructor
   // how come testplanetconstructor knows to use this second one?
   // does it know based on the argument type its being passed?
   public Planet(Planet p) {
      xxPos = p.xxPos;
      yyPos = p.yyPos;
      xxVel = p.xxVel;
      yyVel = p.yyVel;
      mass = p.mass;
      imgFileName = p.imgFileName;
   }
}
我的主要问题是: 1) 另一个具有调用该类的main的类如何确定要使用哪个构造函数

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

我意识到后续问题可能是你永远都不应该做的事情(也就是一些混乱的问题)。我只是好奇。

1)另一个调用该类的main类如何确定要使用哪个构造函数? 类不决定任何事情,程序员决定,他通过放置适当的参数来实现。例如,如果您有两个构造函数
publictest(inti)
publictest()
,当您调用
newtest(5)
时,它将调用第一个构造函数,如果调用
newtest()
,它将调用第二个构造函数

如果…怎么办。。?2) 相同类型和数量的参数? 你不能。它不会编译

如果…怎么办。。?3) 相同类型但参数数量不同? 与1中的相同)

1)另一个具有调用该类的main的类如何确定要使用哪个构造函数? 类不决定任何事情,程序员决定,他通过放置适当的参数来实现。例如,如果您有两个构造函数
publictest(inti)
publictest()
,当您调用
newtest(5)
时,它将调用第一个构造函数,如果调用
newtest()
,它将调用第二个构造函数

如果…怎么办。。?2) 相同类型和数量的参数? 你不能。它不会编译

如果…怎么办。。?3) 相同类型但参数数量不同?
与1中的相同)

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

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


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

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

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

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

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

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

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

这实际上不可能在一个类中编写具有相同签名的两个方法/构造函数。e、 下面的代码从不编译

Planet(int i) {// compilation error
    return 0;
}
Planet(int j) {// compilation error
    return 0;
}
3) 相同类型但参数数量不同

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

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

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

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

这实际上不可能在一个类中编写具有相同签名的两个方法/构造函数。e、 下面的代码从不编译

Planet(int i) {// compilation error
    return 0;
}
Planet(int j) {// compilation error
    return 0;
}
3) 相同类型但参数数量不同

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


构造函数或方法的签名是名称+参数类型。这些代码在源代码中必须是唯一的(否则为编译器错误),并且在使用时使用了最合适的代码。您的问题似乎是问如何工作。对于(2)和(3),为什么不运行代码并亲自查看;)构造函数或方法的签名是名称+参数类型。这些代码在源代码中必须是唯一的(否则为编译器错误),并且在使用时使用了最合适的代码。您的问题似乎是问如何工作。对于(2)和(3),为什么不运行代码并亲自查看;)
Planet p1 = new Planet(d1, d2, d3, d4, d5, img);
Planet p2 = new Planet(p1);