首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从对象Java中删除导入类

从对象Java中删除导入类
EN

Stack Overflow用户
提问于 2016-08-31 08:44:42
回答 4查看 297关注 0票数 0

我需要创建一个toString方法,它打印出建筑物中某个人的坐标,如下所示:

代码语言:javascript
复制
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“是程序调用的类的名称,否则我将不会收到这个模块的标记。有人能帮忙吗?

关于整个对象,请参见下面的内容:

代码语言:javascript
复制
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);
    }
}

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-31 08:50:32

好的,为了让类实例隐式调用它自己的toString()方法,它应该如下所示:

代码语言:javascript
复制
@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()

票数 3
EN

Stack Overflow用户

发布于 2016-08-31 08:49:03

您的toString方法应该是公共的,如果它有@重写注释,那么它将是完美的:

代码语言:javascript
复制
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中扩展ObjectObjectpublic String toString()方法。如果不覆盖它,your_class.toString()将调用默认的Object.toString()方法。

public String toString(){//somecode}的意思是:

该方法是公共的,它返回字符串,它的名称是toString。如果要打印toString()值,请使用:

System.out.println(myPerson.toString());

票数 2
EN

Stack Overflow用户

发布于 2016-08-31 08:52:48

您似乎花了一些时间阅读Java的可见性方面。

很可能,您的老师并不期望您实现toString()的私有版本--他们希望您重写Java中每个类从java.lang.Object继承的公共版本。

代码语言:javascript
复制
class Whatever {
   @Override
   public String toString() { 
     return whatever;
   }
}

请注意:这里的每个关键字都有它的意义--您真的想研究@重写是关于什么的;以及私有和公共之间的区别;当然: toString()方法应该返回一个字符串对象,它们不是空的!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39244813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档