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
相关产品推荐
相关产品推荐

