我有一个问题。我第一次用 JAVA 处理多个类。我在做这件事时遇到了一些麻烦。我创建了一个类,我将从另一个类中调用它。我想创建一个类型坐标
,顾名思义,它保存坐标。然后,我想移动这些坐标。到目前为止,代码如下所示:
public class Coordinate {
double x;
double y;
Coordinate(){
x=0;
y=0;
}
public Coordinate(int x, int y){
this.x = x;
this.y = y;
System.out.print(x);//TO TEST WHETHER IT DOES SOMETHING
}
Coordinate shiftCoordinate(int z, int w){
this.x = x + z;
this.y = y+ w;
return new Coordinate(x,y);//ERROR: The constructor Coordinate(double, double) is undefined
}
}
它会在指定的地方抛出错误。我不明白这个错误。在我的“主”课中,我做了以下事情:
void start() {
Coordinate coordinate = new Coordinate();
coordinate.x=3;
coordinate.y=4;
}
我希望它打印 3
,但事实并非如此。我哪里错了?
最佳答案
首先,您不使用多个类,只有一个:Coordinate
但你想要多个构造函数。
由于您的属性是
double
创建一个需要该类型的构造函数,当您编写new Coordinate(5,6)
时将使用它public Coordinate(double x, double y) { this.x = x; this.y = y; }
如果您想要一个默认构造函数(无参数),当您调用
new Coordinate()
时将使用它。您想要一种从
Coordinate
转变的方法实例你有两种方法:修改当前实例或创建一个新实例,但不要同时执行这两种操作(就像你的代码),在最后获得两个具有相同值的对象是没有用的// modify current instance void shiftCoordinate(double z, double w) { this.x = x + z; this.y = y + w; } // return a new object Coordinate shiftCoordinate(double z, double w) { return new Coordinate(this.x + z, this.y + w); }
另外,你最后的代码使用了没有参数的默认构造函数,所以这是正常的,你看不到任何打印使用 new Coordinate(3,4)
看到它
经典的构造函数也是克隆实例的构造函数,它接受一个实例并创建一个具有相同值的新实例:
public Coordinate(Coordinate clone) {
this.x = clone.x;
this.y = clone.y;
}
关于java - 使用多个类时未定义构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58807725/