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

Java代码可编译但toString方法不输出,需子类调用或其他实现方式?

问题分析与解决方案

嘿,我帮你梳理下代码里的问题哈~你的toString方法没法输出内容,核心是两个关键问题:


1. 你写的toString不是Java标准的toString方法

Java里所有类默认继承的Object类,它的toString()是无参方法,但你给Animal类写的是带int numberOfLegs, boolean sleep参数的版本——这其实只是一个普通的自定义方法,不是系统会自动调用的那个标准toString。而且你调用它的时候,只是执行了方法却没把返回值打印出来,自然看不到输出。

2. 修正后的正确写法

先修改Animal类里的toString方法,改成无参的,直接用类自己的实例变量(因为numberOfLegs和sleep是Animal的private变量,类内部可以直接访问):

public class Animal {
    // 实例变量和构造器保持不变...

    // 修正后的toString方法:无参,覆盖Object的toString
    @Override
    public String toString() {
        return numberOfLegs + " legs, sleep: " + sleep;
    }

    // walk方法保持不变...

    public static void main(String[] args) {
        Animal animal1 = new Tiger();
        animal1.walk();
        // 两种方式打印toString的结果:
        // 方式1:直接打印对象,Java会自动调用toString
        System.out.println(animal1);
        // 方式2:显式调用toString并打印
        // System.out.println(animal1.toString());
    }
}

3. 子类Tiger的toString扩展

如果Tiger有自己的实例变量(比如private String tigerType;),想要在toString里同时展示父类+子类的信息,就需要在Tiger里重写toString,同时调用super.toString()来复用父类的逻辑:

class Tiger extends Animal {
    private String tigerType; // 子类自定义变量

    void walk(){
        super.walk();
        System.out.println("a Tiger");
    }

    public Tiger(){
        super();
    }

    public Tiger(String tigerType) {
        super();
        this.tigerType = tigerType;
    }

    @Override
    public String toString() {
        // 把父类的toString结果和子类变量拼接
        return super.toString() + ", type: " + tigerType;
    }
}

这样修改后,运行main方法就能看到正确的输出啦~比如普通Animal实例会输出6 legs, sleep: true,带类型的Tiger实例会输出6 legs, sleep: true, type: 东北虎之类的内容。

内容的提问来源于stack exchange,提问作者silverFox

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:29:34