从对象Java中删除导入的类

时间:2016-08-31 08:44:42

标签: java

我需要创建一个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);
    }
}

(请注意,这只是整个项目的一小部分。)

5 个答案:

答案 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中扩展ObjectObject包含方法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);
}