class Date {
private int year;
private String month;
private int day;
public Date() {
month = "January";
year = 1999;
day = 1;
} //End of Constructor 1
public Date(int year, String month, int day) {
setDate(year, month, day);
} //End of Constructor 2
public Date(int year) {
setDate(year, "January", 1);
} //End of Constructor 3
public void setDate(int year, String month, int day) {
this.year = year;
this.month = month;
this.day = day;
} //End of Constructor 4
}
public class Calendar {
public static void main(String[] args){
Date date1 = new Date(2009, "March", 3);
Date date2 = new Date(2010);
Date date3 = new Date();
}
}
在上面的代码中,为date1,date2和date3调用了哪些构造函数?在调用构造函数后如何打印date1,date2和date3的结果?
我尝试了System.out.println(date1)
等等,但它给了我像u.Date@15db9742
这样的奇怪字符串。
我期待看到2009年3月1日或类似的东西。
答案 0 :(得分:2)
当您尝试打印对象时,将调用其toString()
方法,该方法将被所有人继承
来自Object class
的java类(默认情况下所有java类的超类)。因此,您必须在班级中覆盖toString()
方法
如果您需要打印对象的某些特定内容。默认情况下,此方法打印
Class and its hash code
。由于您尚未覆盖toString()
,因此打印的字符串
包含对象类及其哈希码(u.Date@15 ....)。
构造函数调用由传递给构造函数的参数确定。
与date1
中一样,您按顺序传递了类型int,string and int
的3个参数。
这与int, string and int
的构造函数2参数匹配。
所以在你的date1对象构造中,调用构造函数2。
类似于date2,调用构造函数3
对于date3,默认构造函数即consturcot 1被调用。
您标记的“构造函数4”不是构造函数,它只是一个方法。 构造函数没有返回类型。
同样,要按照您在问题中的预期进行打印,请覆盖您班级中的toString()
方法,并在该方法中相应地格式化结果,以获得预期结果。
答案 1 :(得分:0)
date1,date2,date3是类Date的对象,因此无法打印。要打印它,您必须覆盖toString()方法。
String toString() {
return year + " " + month + " " + day;
}
另外, 构造函数仅用于初始化字段。
public void setDate(int year, String month, int day) {
this.year = year;
this.month = month;
this.day = day;
} //End of Constructor 4
此方法不是构造函数,因为构造函数始终与类具有相同的名称,并且没有显式的返回类型。
答案 2 :(得分:0)
你只需要将被调构的构造函数的参数与定义的构造函数匹配,如果你没有定义任何参数,那么将调用默认构造函数,如
日期date1 =新日期(2009年,“March”,3);它会调用
public Date(int year, String month, int day) {
setDate(year, month, day);
} //End of Constructor 2
日期date3 =新日期();将调用
Public Date() {
month = "January";
year = 1999;
day = 1;
} //End of Constructor 1
日期date2 =新日期(2010年);它会调用
public Date(int year) {
setDate(year, "January", 1);
} //End of Constructor 3