我需要创建一个toString方法,它打印出建筑物中某个人的坐标,如下所示:
private void toString() {
if (level == destination)
System.out.println(name + id + " on level " + level);
else
System.out.println(name + "(" + id + ")" + " on level " + level + " waiting to go to level " + destination);不幸的是,java.util.*在使用时也会导入一个toString类。重要的是,"toString“是程序调用的类的名称,否则我将不会收到这个模块的标记。有人能帮忙吗?
关于整个对象,请参见下面的内容:
import java.util.*;
public class Person {
private int id;
private String name;
private int level;
private int destination;
private boolean aboard;
public Person (int id, String name, int level){
this.id = id;
this.name = name;
this.level = level;
this.destination = level;
}
private void toString(){
if(level == destination)
System.out.println(name + id + " on level " + level);
else
System.out.println(name + "(" + id + ")" + " on level " + level + " waiting to go to level " + destination);
}
}(请注意,这只是整个项目的一小部分)。
发布于 2016-08-31 08:50:32
好的,为了让类实例隐式调用它自己的toString()方法,它应该如下所示:
@Override
public String toString(){
if(level == destination)
return name + id + " on level " + level;
else
return name + "(" + id + ")" + " on level " + level + " waiting to go to level " + destination;
}而不是调用System.out.println。
TL;DR -您没有覆盖toString(),因为您将方法签名从public String toString()更改为private void toString()。
发布于 2016-08-31 08:49:03
您的toString方法应该是公共的,如果它有@重写注释,那么它将是完美的:
import java.util.*;
public class Person {
//...
@Override
public String toString(){
if(level == destination)
return name + id + " on level " + level;
return name + "(" + id + ")" + " on level " + level + " waiting to go to level " + destination;
}
}让我们向你介绍这个话题。在Java中,我们有有字段和方法的类。在您的例子中,Person是一个类,它有5个fields和两个方法。其中之一是构造函数。你当然会有更多,但这就是你向我们展示的。
访问修饰符用于限制不需要的访问。方法toString()必须是公共的,因为它是在父类中声明的。private方法只能从类内部调用,也只能从其他方法调用。田野也是一样。
不能从java.util导入方法。导入类。每个类都在Java中扩展Object,Object有public String toString()方法。如果不覆盖它,your_class.toString()将调用默认的Object.toString()方法。
public String toString(){//somecode}的意思是:
该方法是公共的,它返回字符串,它的名称是toString。如果要打印toString()值,请使用:
System.out.println(myPerson.toString());
发布于 2016-08-31 08:52:48
您似乎花了一些时间阅读Java的可见性方面。
很可能,您的老师并不期望您实现toString()的私有版本--他们希望您重写Java中每个类从java.lang.Object继承的公共版本。
class Whatever {
@Override
public String toString() {
return whatever;
}
}请注意:这里的每个关键字都有它的意义--您真的想研究@重写是关于什么的;以及私有和公共之间的区别;当然: toString()方法应该返回一个字符串对象,它们不是空的!
https://stackoverflow.com/questions/39244813
复制相似问题