研究Java项目以研究多态性。我正在尝试学习如何从底层子项向上传递一个toString()。我必须将toString表单Hardware.java传递给Tool.java到ScrewDriver.java,然后在Player.java中,我需要打印出我已定义的数组。
以下是文件:
public class Player {
public static void main(String[] args) {
List<Hardware> hardware = new ArrayList<>();
ScrewDriver screwdriver1 = new ScrewDriver("Flathead", "Use this to open paint cans", 150, "Woodworking", true, 15, 10);
hardware.add(screwdriver1);
for(Hardware tool : hardware)
System.out.print(tool);
}
}
public class Hardware {
private String name;
private String message;
private int points;
@Override
public String toString() {
super.toString();
return "Name: " + name + " Message: " + message + " Points: " + points;
}
}
public class Tool extends Hardware {
private String type;
private boolean isDangerous;
private int percentDangerous;
@Override
public String toString() {
super.toString();
return "Type: " + type + " Message: " + isDangerous + " Percent Dangerous: " + percentDangerous;
}
}
public class ScrewDriver extends Tool {
private double length;
@Override
public String toString() {
super.toString();
return "Length: " + length;
}
}
我遇到的问题是,从阵列打印的唯一内容是长度。
非常感谢任何帮助!提前谢谢。
答案 0 :(得分:3)
您无法从超类访问子类的方法。只有相反的方式才有可能。因此,您可以在Tool类中访问Hardware的toString(),在ScrewDriver类中访问Tool的toString()。
为了在ScrewDriver的toString()方法中打印ScrewDriver的所有超类的toString()信息,您需要修改此继承链中的所有toString()方法。
假设Hardware的toString()是这样的:
@Override
public String toString()
{
return "Name: " + name + " Message: " + message + " Points: " + points;
}
您需要将Tool的toString()修改为以下内容,以便它使用其超类的toString()方法:
@Override
public String toString()
{
return super.toString() + " Type: " + type + " Message: " + isDangerous + " Percent Dangerous: " + percentDangerous;
}
最后,ScrewDriver的toString()应调用其超类的toString()方法,如下所示:
@Override
public String toString()
{
return super.toString() + " Length: " + length;
}
只有这时,ScrewDriver的toString()才会打印其所有超类的信息。
答案 1 :(得分:0)
super.toString();
方法调用返回String,但是你没有使用这个调用的结果,所以基本上你在浪费CPU周期。
可能的解决方案是:
@Override
public String toString()
{
return super.toString() + "\nLength: " + length;
}