Jos*_*imm 1 java arrays arraylist object tostring
从事一个Java项目来研究多态性。我正在尝试学习如何从底部子级向上传递 toString() 。我必须将 Hardware.java 中的 toString 传递到 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;
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是从数组中打印的唯一内容是长度。
任何帮助将非常感激!先感谢您。
您无法从超类访问子类的方法。只有反过来才是可能的。因此,您可以在 Tool 类中访问 Hardware 的 toString() ,在 ScrewDriver 类中访问 Tool 的 toString() 。
为了在ScrewDriver的toString()方法中打印ScrewDriver所有超类的toString()信息,需要修改这个继承链中的所有toString()方法。
假设Hardware的toString()是这样的:
@Override
public String toString()
{
return "Name: " + name + " Message: " + message + " Points: " + points;
}
Run Code Online (Sandbox Code Playgroud)
您需要将 Tool 的 toString() 修改为以下内容,以便它使用其超类的 toString() 方法:
@Override
public String toString()
{
return super.toString() + " Type: " + type + " Message: " + isDangerous + " Percent Dangerous: " + percentDangerous;
}
Run Code Online (Sandbox Code Playgroud)
最后,ScrewDriver 的 toString() 应该调用其超类的 toString() 方法,如下所示:
@Override
public String toString()
{
return super.toString() + " Length: " + length;
}
Run Code Online (Sandbox Code Playgroud)
只有这样,ScrewDriver 的 toString() 才会打印其所有超类的信息。