问题描述
以下代码:
public class Drone {
static int x;
static int y;
public Drone(int x,int y) {
toString(x,y);
System.out.println("X is "+x);
System.out.println("Y is "+y);
}
public String toString(int x,int y) {
System.out.println("X is "+x);
System.out.println("Y is "+y);
return "Drone 0 is at "+x+","+y;
}
public static void main(String[] args) {
Drone d = new Drone(5,3); // create drone
System.out.println(d.toString()); // print where is
}
使行System.out.println(d.toString());
似乎不打印。如此处所示:
解决方法
您从main调用的方法toString()
不是您定义的public String toString(int x,int y)
。相反,它是Object
的默认实现,它会完全生成您在输出中看到的String。
要添加toString
的自定义实现,您需要覆盖该实现,这意味着您需要完全匹配签名(即没有参数)。
类似
@Override
public String toString() {
return "Drone 0 is at "+this.x+","+this.y;
}
,
您编写的toString方法需要两个自变量,但尚未传递。这就是为什么它要调用对象类的toString的原因。如果要调用方法,则需要传递参数。