gpt4 book ai didi

java - toString 返回不同的值

转载 作者:行者123 更新时间:2023-12-03 23:03:25 25 4
gpt4 key购买 nike

我是 java 的新手,我正在做一个简单的程序,但我不知道为什么我会得到不同的值,即,如果我使用 getX、getY 和 getZ,我会得到 (6,5,8) 但是如果我使用 toString 我会得到不同的 X 和 Y 值(3、4、8),那么谁能解释为什么会这样,因为据我所知,在这两种情况下它应该得到相同的值,或者我做错了什么?

public class Coordinates {

private double coorX, coorY;

Coordinates()
{
coorX = 1;
coorY = 1;
}

Coordinates(double x, double y)
{
coorX = x;
coorY = y;
}

void setX(double x)
{
coorX = x;
}

void setY(double y)
{
coorY = y;
}

double getX()
{
return coorX;
}

double getY()
{
return coorY;
}

public String toString()
{
String myString = "(" + coorX + " , " + coorY + ")";
return myString;
}

public class Coordinates3D extends Coordinates{
private double coorZ;

Coordinates3D()
{
super();
coorZ = 1;
}

Coordinates3D(double x, double y, double z)
{
super(x,y);
coorZ = z;
}

public void setZ(double z)
{
coorZ = z;
}

double getZ()
{
return coorZ;
}

@Override
public String toString()
{
String myString = "(" + coorX + " , " + coorY + " , " + coorZ + ")" ;
return myString;

}

}


/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

Coordinates test1 = new Coordinates(3,4);


System.out.println(test1.toString());

System.out.println(test1.getX());
System.out.println(test1.getY());


Coordinates3D test2 = test1.new Coordinates3D(6,5,8);

System.out.println(test2.toString()); ---> here is the problem

System.out.println(test2.getX());
System.out.println(test2.getY());
System.out.println(test2.getZ());


}

}

最佳答案

首先,关于如何定义父类(super class)字段的可见性存在一个问题:

public class Coordinates {
//defines as private
//sub classes cannot access to these fields directly
private double coorX, coorY;

这是您不能在任何子类上调用 super.coorXsuper.coorY,例如Coordinates3D。所以,在 toString 方法中,当你有这段代码时:

String myString = "(" + coorX + " , " + coorY + " , " + coorZ + ")" ;

它编译并运行良好因为Coordinates3D 是一个内部类。因此,当在这里使用 coorX 时,它正在访问存储在创建 实例的 Coordinates 类实例中的 coorX 字段的值坐标 3D。如果将类分开,这很容易复制:

class Coordinates {
private double coorX, coorY;
}

public class Coordinates3D extends Coordinates {
//current code...
@Override
public String toString() {
//now you will get a compilaton error
String myString = "(" + coorX + " , " + coorY + " , " + coorZ + ")" ;
return myString;
}
}

最好的解决方案是:

  • 将父类(super class)中的字段标记为protected
  • 将类(class)分开

如果您仍想将 Coordinates3D 保留为内部类(不推荐),则:

  • 将父类(super class)中的字段标记为protected
  • 使用 super.coorXsuper.coorY 不会出现相同的意外行为。

关于java - toString 返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26700542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com