You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 20:02:37