我有一个抽象类Mower,它覆盖了toString()方法。草坪拖拉机类扩展了割草机。它重写了toString()方法并调用super.toString()作为方法的第一行。然后我有一个商业类,它扩展了LawnTractor并覆盖了toString(),同样在第一行调用了super.toString()。 当实例化一个Commercial对象(声明为Mower对象)并调用它的toString()时,我希望它能从Mower和Lawn Tractor打印这两个属性,然后再打印它自己的属性。相反,它只打印Mower中的属性,然后打印自己的属性。如何在Commercial中调用或覆盖toString()方法,以便它调用其父(LawnTractor)toString()而不仅仅是超类(Mower)。
xlim
答案 0 :(得分:2)
所以听起来你要做的就是创建一个toStrings层次结构,当你有一个对象图时打印。所以你需要做的就是将super的toStrings附加到链上。 (如果我理解正确的话)
这是割草机类
public class Mower {
@Override
public String toString() {
return "Mower toString\n";
}
}
LawnTractor
public class LawnTractor extends Mower {
@Override
public String toString() {
String superString = super.toString();
return superString + "LawnTractor toString\n";
}
}
商业
public class Commercial extends LawnTractor {
@Override
public String toString() {
String superString = super.toString();
return superString + "Commercial toString\n";
}
}
运行它的主类。请参阅下面的输出。这是你要去的地方。
public class Main {
public static void main(String[] args) {
Mower mow = new Commercial();
System.out.println(mow.toString());
}
}
这是你的输出。我相信这就是你要找的东西。如果没有请澄清
Mower toString
LawnTractor toString
Commercial toString
您希望对象在返回字符串中显示的顺序可以重新排序,具体取决于您将它们附加在一起的方式。割草机可以是第一个或最后一个。
答案 1 :(得分:0)
我意识到自己的错误。我的Mower类有tostring()方法,但不会覆盖toString()方法(语法上的差异)。