Java中同名的点类对象

Java中同名的点类对象,java,Java,我正在做一个班级专题。我们必须设置2个坐标对的值,然后找到它们之间的长度。我在整个程序中使用对象调用点时出错。它给我一个错误,说它是重复的方法。我已附加了我的类,并标记了我的错误 public class Point { private double distance; private double x1; private double x2; private double y1; private double y2; public Point(double x1) //ERROR {

我正在做一个班级专题。我们必须设置2个坐标对的值,然后找到它们之间的长度。我在整个
程序中使用
对象
调用点时出错。它给我一个错误,说它是重复的
方法
。我已附加了我的
,并标记了我的
错误

public class Point 
{
private double distance;
private double x1;
private double x2;
private double y1;
private double y2;

public Point(double x1) //ERROR
{
    this.x1 = x1;
}
public void setX1(double x1)
{
    this.x1 = x1;
}
public double getx1(double x1)
{
    return x1;
}
public Point(double x2) //ERROR
{
    this.x2 = x2;
}
public void setX2(double x2)
{
    this.x2 = x2;
}
public double getX2(double x2)
{
    return x2;
}
public Point(double y1) //ERROR
{
    this.y1 = y1;
}
public void setY1(double y1)
{
    this.y1 = y1;
}
public double getY1(double y1)
{
    return y1;
}
public Point(double y2) // ERROR
{
    this.y2 = y2;
}
public void setY2(double y2)
{
    this.y2 = y2;
}
public double getY2(double y2)
{
    return y2;
}
public double distance()
{
    return Math.sqrt((Math.pow(x2 - x1, 2.0) + (Math.pow(y2 - y1, 2))));
}

}
我曾经做过类似的事情,我用了相同的名字,但效果很好,所以我不确定这里到底出了什么问题。谢谢你的帮助

编辑:我有一个类似设置的代码,但不会抛出错误。为什么呢

public class Car 
{
private String make;
private String model;
private int year;

public Car()
{

}
public Car(String make)
{
    this.make = make;
}
public void setMake(String carMake)
{
    this.make = carMake;
}
public String getMake()
{
    return make;
}
public void Car(String model)
{
    this.model = model;
}
public void setModel(String carModel)
{
    this.model = carModel;
}
public String getModel()
{
    return model;
}
public Car(int year)
{
    this.year = year;
}
public void setYear(int carYear)
{
    this.year = carYear;
}
public int getYear(int year)
{
    return year;
}
public boolean isAntique()
{
    if ((2015 - year) >= 45){
        return true;
    }
    if ((2015 - year) < 45){
        return false;
    }
    return false;
}
public String toString()
{
    return "Car Make: " + make + " Car Model: " + model + " Car Year: " + year + " Antique? " + isAntique();
}
公车
{
私人字符串制作;
私有字符串模型;
私人国际年;
公共汽车
{
}
公共汽车(串制)
{
make=make;
}
公共void setMake(字符串carMake)
{
this.make=carMake;
}
公共字符串getMake()
{
退货;
}
公共车辆(字符串模型)
{
this.model=模型;
}
公共void集合模型(字符串carModel)
{
this.model=carModel;
}
公共字符串getModel()
{
收益模型;
}
公共汽车(国际年)
{
今年=年;
}
公共无效设置年(整数年)
{
this.year=carYear;
}
公共整数年(整数年)
{
回归年;
}
公共布尔值isAntique()
{
如果((2015年)>=45){
返回true;
}
如果((2015年)<45){
返回false;
}
返回false;
}
公共字符串toString()
{
返回“汽车制造:“+制造+”汽车型号:“+车型+”汽车年份:“+年份+”古董?”+isAntique();
}

}

简而言之:在java类中,不能有重复的构造函数,所谓重复,我们指的是2个或更多具有相同参数类型和顺序的构造函数,在您的例子中,有2个具有双参数的构造函数,这对编译器来说是相同的方法

public Point(double x1) //first declared constructor with double argument
{
    this.x1 = x1;
}

public Point(double x2) //remove this constructor
{
    this.x2 = x2;
}

简而言之:在java类中,不能有重复的构造函数,所谓重复,我们指的是2个或更多具有相同参数类型和顺序的构造函数,在您的例子中,有2个具有双参数的构造函数,这对编译器来说是相同的方法

public Point(double x1) //first declared constructor with double argument
{
    this.x1 = x1;
}

public Point(double x2) //remove this constructor
{
    this.x2 = x2;
}
公共点(双x1)
公共点(双y2)
是一回事。如果您编写了
新点(1.0),那么应该调用哪一个

构造函数和方法需要在名称、参数类型或参数数量上有所不同。您很可能不会有一个只接受一个双精度值的构造函数,因为很难用一个坐标定义一个点

我怀疑唯一的(或至少是主要的)构造函数将是一个接受4个
值的构造函数。

公共点(双x1)
公共点(双y2)
是一回事。如果您编写了
新点(1.0),那么应该调用哪一个

public Point(double x1) //ERROR
{
    this.x1 = x1;
}

public Point(double x2) //ERROR
{
    this.x2 = x2;
}
构造函数和方法需要在名称、参数类型或参数数量上有所不同。您很可能不会有一个只接受一个双精度值的构造函数,因为很难用一个坐标定义一个点

我怀疑唯一的(或至少是主要的)构造函数是接受4个
双值的构造函数

public Point(double x1) //ERROR
{
    this.x1 = x1;
}

public Point(double x2) //ERROR
{
    this.x2 = x2;
}

让我们考虑这两个构造函数工作正常,编译器不会抛出任何错误。 现在调用构造函数时

Point对象=新点(10.00)

你认为哪一点会被初始化?x1还是x2

要避免这些问题,您不能有两个具有相同签名的构造函数。

让我们考虑这两个构造函数工作正常,编译器不会抛出任何错误。 现在调用构造函数时

Point对象=新点(10.00)

你认为哪一点会被初始化?x1还是x2

为了避免这些问题,您不能有两个具有相同签名的构造函数。

签名 Java通过名称和参数类型了解方法/构造函数(参数名称在编译时被删除,它们主要是一个开发实用程序)。方法名称和参数类型(例如,
点(双)
)的组合称为方法的签名在任何给定的类中,您只能找到一次签名

为什么呢? 在这里,你有四次
点(双)

当您调用
新点(13.37)
时,JVM无法知道您是在调用
点(双x1)
点(双x2)
点(双y1)
还是
点(双y2)
。因此,这是被禁止的,并将在编译时被拦截,从而产生错误

你能做什么 您应该检查构造函数以传递4个双精度值,或者根本不传递,然后使用setter

public Point() {
    // this is it, use setters to initialize the values
    // useful when using serialization
}

public Point(double x1, double x2, double y1, double y2) {
    this.x1 = x1;
    this.x2 = x2;
    this.y1 = y1;
    this.y2 = y2;
}
为什么
汽车
在工作? 让我们检查签名:

public Car()
public Car(String make)
public void Car(String model)
Car()
Car(字符串)
明显不同

您还有一个方法
Car(String)
(object.Car(“sth”)
)和一个构造函数
Car(String)
新车(“sth”)`)。这两种方法不同,但方法不正确(不建议以类的形式调用方法,因为这样可能会混淆,实际上会混淆您)。

Java通过名称和参数类型了解方法/构造函数(参数名称在编译时被删除,它们主要是一个开发实用程序)。方法名称和参数类型(例如,
点(双)
)的组合称为方法的签名在任何给定的类中,您只能找到一次签名

为什么呢? 在这里,你有四次
点(双)

当您调用
新点(13.37)
时,JVM无法知道您是在调用
点(双x1)
点(双x2)
点(双y1)
还是
点(双y2)
。因此,这是被禁止的,并将在编译时被截获