Java继承构造器问题:打印Exam对象显示地址而非指定字符串求助
解决Java对象打印显示指定字符串的问题
嘿,我来帮你搞定这个问题!你现在打印Exam对象时看到的类似asd.Exam@36baf30c的输出,是因为所有Java类默认都继承自Object类,而Object自带的toString()方法,默认返回的就是「类名@对象哈希码的十六进制表示」。要让打印时显示你想要的"Good luck",只需要在Exam类里重写toString()方法就可以啦。
修改后的完整代码
我已经帮你调整了代码,添加了重写的toString()方法:
class Exam { private boolean status; private double price; String message = "Good luck"; public Exam(String period, String level) { } public void setPrice(double p) { this.price = p; } public double getPrice() { return price; } public void setFinished(boolean f) { this.status = f; } public boolean isFinished() { return status; } // 重写toString方法,自定义打印内容 @Override public String toString() { return this.message; // 直接返回message里的"Good luck" } class Midterm extends Exam { public Midterm(String period, String level) { super(period, level); System.out.println("Exam has started"); } } class Quiz extends Exam { public Quiz(String period, String level) { super(period, level); } } class Essay extends Quiz { public Essay(String period, String level) { super(period, level); } } public static void main(String[] args) { Exam e = new Exam("wew", "wew"); System.out.println(e); // 现在会打印"Good luck"啦 } }
额外小提示
如果你想打印更丰富的信息(比如同时显示price、status这些属性),可以修改toString()的返回值,举个例子:
@Override public String toString() { return "Exam{message='" + message + "', price=" + price + ", isFinished=" + status + "}"; }
这样打印出来的内容会是类似Exam{message='Good luck', price=0.0, isFinished=false}的格式,信息更完整。
另外,你定义的内部类(Midterm、Quiz、Essay)如果也需要自定义打印内容,也可以在各自类里重写toString()方法,它们会自动覆盖父类的实现哦。
内容的提问来源于stack exchange,提问作者1337
相关产品推荐
相关产品推荐

