Java中同名的点类对象
我正在做一个班级专题。我们必须设置2个坐标对的值,然后找到它们之间的长度。我在整个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 {
程序中使用对象
调用点时出错。它给我一个错误,说它是重复的方法
。我已附加了我的类
,并标记了我的错误
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)
。因此,这是被禁止的,并将在编译时被截获