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);