Java中的toString方法

时间:2011-04-24 07:06:44

标签: java tostring

为什么时间不以正常(可读)方式显示?缺少方法toString?

import java.util.Calendar;

abstract class Calender {

    abstract void showTime();

    void time() {
        Calendar rightNow = Calendar.getInstance();
        System.out.println("Time: " + rightNow);
    }

    public String toString() {
        return "Calender [toString()=" + super.toString() + "]";
    }

}

class Calender1 extends Calender {
    public static void main (String[] args) {
        Calender1 cal = new Calender1();
        cal.time();
    }

    void showTime() {       
    }
}

谢谢。 Java菜鸟。

5 个答案:

答案 0 :(得分:3)

您可以使用以下代码显示当前时间:

DateFormat timeFormat = DateFormat.getTimeInstance();
Calendar currentDate = Calendar.getInstance();
System.out.println(timeFormat.format(currentDate.getTime()));

答案 1 :(得分:2)

不确定你在这里做了什么。

看起来你已经编写了自己的抽象类Calendar,并在Calendar1中继承了它。

您编写的第一个Calendar类继承自对象,其toString将不会有趣/有用。

日历上toString的文档位于: http://download.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html#toString()

底线 - 不要依赖它。

答案 2 :(得分:0)

为什么你在基类中使用super?我不确定你要做什么但是在基类Calendar中你只需要toString()方法。

在Calender1类中,您还需要创建一个toString()方法。在那里你会调用use super.toString()这是因为你继承日历所以它是你的超类

答案 3 :(得分:0)

您正在调用没有父类的super(实际上您正在调用Object.toString()) 这将返回类的名称和内存地址: http://download.oracle.com/javase/6/docs/api/java/lang/Object.html#toString%28%29

你可能想要这样的东西:

@Override
public String toString() {
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy.MM.dd hh:mm:ss");
    return "Calender [toString()=" + formatter.format(rightNow.getTime()) + "]";
}

答案 4 :(得分:0)

你可能试过这个:

Calendar cal = Calendar.getInstance();
System.out.println(cal);

这给出了这样的输出:

java.util.GregorianCalendar[time=1303645990437,areFieldsSet=true,areAllFieldsSet=true,...

这是GregorianCalendar的toString方法,它提供了其实现的所有细节状态细节,而不是可读的日期时间表示。

作为一个实验,您可以使用不同的toString实现创建一个扩展GregorianCalendar的匿名内部类:

Calendar cal = new GregorianCalendar() {        
    public String toString() {
        return getTime().toString();
    }
};
System.out.println(cal);

打印:

Sun Apr 24 13:53:10 CEST 2011

(YMMV)。

然而,这有点卷曲。通常,您可以使用其他几个答案中显示的DateFormat来将日历的显示与其实现分离。