我正在学习使用Michael Ernest的"Java SE7 Programming Essentials"一书进行Java OCA测试.这是我对以下问题的答案之一的代码:
public class Point3D {
int x, y, z;
public void setX(int x) {
this.x = x;
}
public int getX() {
return this.x;
}
public void setY(int y) {
this.y = y;
}
public int getY() {
return this.y;
}
public void setZ(int z) {
this.z = z;
}
public int getZ() {
return this.z;
}
public String toString(Point3D p) {
String result = p.getX() + "," + p.getY() + "," + p.getZ();
return result;
}
public static void main(String args[]) {
Point3D point = new Point3D();
point.setX(5);
point.setY(12);
point.setZ(13);
System.out.println(point.toString(point));
}
}
Run Code Online (Sandbox Code Playgroud)
我的代码工作正常,但在最后一行,我认为我已经以一种奇怪的方式制作了我的代码,难道不应该有一种方法来生成point.toString()而不point.toString(point)返回该点的String表示吗?任何人都可以向我解释如何解决它?
我确信这是一个简单的答案,只是试图理解它,因为我怀疑它指出了我的java知识漏洞.
您的方法public String toString(Point3D p)不会覆盖Object.toString(),这是获取String表示形式的标准方法Object.
重写它的目的是允许任何子类Object提供对象的适当表示形式String.Java API在许多情况下使用此方法,主要是在需要将其转换Object为a时String(例如,在执行System.out.println(object)或执行字符串连接时:
String s = "The point is " + pointObject;
实施它作为ay89建议:
@Override
public String toString() {
String result = getX() + "," + getY() + "," + getZ();
return result;
}
Run Code Online (Sandbox Code Playgroud)
请注意注释的用法@Override.如果您在方法上使用它,编译器会警告您它的定义有问题.
你为什么不用
public String toString() {
String result = getX() + "," + getY() + "," + getZ();
return result;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用 System.out.println(point)
| 归档时间: |
|
| 查看次数: |
12107 次 |
| 最近记录: |