java - 使用多个类时未定义构造函数

标签 java class constructor

我有一个问题。我第一次用 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但你想要多个构造函数。

  1. 由于您的属性是 double创建一个需要该类型的构造函数,当您编写 new Coordinate(5,6) 时将使用它

    public Coordinate(double x, double y) {
        this.x = x;
        this.y = y;
    }
    
  2. 如果您想要一个默认构造函数(无参数),当您调用 new Coordinate() 时将使用它。

  3. 您想要一种从 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/

相关文章:

scala - scala中的对象实例化变体

c++ - 使用 const 值数组初始化基类

java - 在 Java 中使用 super

C#构造函数的奇怪问题

java - 泛型方法有界类型参数和类型删除

java - eclipse RCP 构建多个功能的更新站点

java - 'SSSXXX'在java简单日期格式对象中意味着什么?

java - JMS 中的动态消息选择器

c++ - 检查字符串是否包含数字的函数

c++ - 像数组一样初始化类对象