首页 > 解决方案 > 使用多个类时构造函数未定义

问题描述

我有个问题。我第一次在 JAVA 中处理多个类。我在做这件事时遇到了一些麻烦。我创建了一个类,我将从另一个类中调用它。我想做一个 type Coordinate,顾名思义,它保存坐标。然后,我想移动这些坐标。到目前为止,代码如下所示:

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,但事实并非如此。我哪里错了?

标签: javaclassconstructor

解决方案


首先,您不使用 mutiples 类,只有一个 :Coordinate但您需要多个构造函数。

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

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

  3. 您想要一种从Coordinate实例转移的方法,您有 2 种方法:修改当前实例创建一个新实例,但不要同时执行这两种方法(如您的代码),最后获得 2 个具有相同值的对象是没有用的

    // 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;
    }

推荐阅读