我需要创建一个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);
}
}
(请注意,这只是整个项目的一小部分。)
答案 0 :(得分:3)
好的,为了让您的类实例隐式调用它自己的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;
}
insteasd调用System.out.println。
TL; DR - 您未覆盖toString()
,因为您已将方法签名从public String toString()
更改为private void toString()
。
答案 1 :(得分:2)
你的toString方法应该是公共的,如果它有@Override注释,它将是完美的:
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}
表示:
方法是public,它返回String,它的名字是toString。如果要打印toString()
值,请使用:
System.out.println(myPerson.toString());
答案 2 :(得分:0)
您似乎花了一些时间阅读Java的可见性方面。
最有可能的是,您的教师不希望您实现toString()的私有版本 - 他们希望您覆盖Java中每个和任何类继承自java.lang的公共版本。 .Object。
class Whatever {
@Override
public String toString() {
return whatever;
}
}
请注意:每个关键字都有其含义 - 你真的想研究@Override的含义;私人和公众之间的区别是什么;当然:toString()方法应该返回一个字符串对象,它们不是无效的!
答案 3 :(得分:0)
你确实是对的,java中的Objects继承了.toString()
方法(参见here)
从对象覆盖标准.toString()
方法的方法是使用Override-Annotation,如下所示:
@Override
public String toString(){
// Do something here
}
所以目前你的代码可以工作,但是由于返回类型不同(void VS String),你的.toString()
方法不会覆盖标准方法。只要返回类型不同,Java就不会将它们识别为相同的方法。
因此,更改返回类型并添加@Override
注释应该可以解决您的问题!
答案 4 :(得分:-1)
这可能不会直接回答你的问题,但只要你的程序是这样的,它就不会编译。原因是您不允许使用较弱的权限覆盖任何java
方法。
toString
方法在顶部的 祖父 public
上声明为java.lang.Object
。所有java类都会自动继承它,因此除了覆盖之外没有什么可以做的。现在,只要在对象上调用print方法,就会自动调用此方法:
System.out.print( MyClass );
您应该做的不是创建新的toString()
方法,而是覆盖现有方法。要覆盖toString()
方法,必须这样写:
@Override
public String toString()
{
String message = "Whatever";
return String.format("What to print.%s", message);
}