在java中自定义toString()

loc*_*ost 1 java

我正在学习使用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知识漏洞.

Xav*_*ica 7

您的方法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.如果您在方法上使用它,编译器会警告您它的定义有问题.


Ank*_*kit 5

你为什么不用

public String toString() {
    String result = getX() + "," + getY() + "," + getZ();
    return result;      
}
Run Code Online (Sandbox Code Playgroud)

然后你可以使用 System.out.println(point)