如何使用 Java 中的 super.toString() 将 toString 从 child 传递到 parent
How to pass toString from child to parent using super.toString() in Java
正在进行 Java 研究多态性的项目。我正在尝试学习如何从底部 child 向上传递一个 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;
}
}
我遇到的问题是,从数组中打印的唯一内容是长度。
非常感谢任何帮助!提前谢谢你。
super.toString();
方法调用返回字符串,但您没有使用此调用的结果,所以基本上您在上面浪费了 CPU 个周期。
可能的解决方案如下:
@Override
public String toString()
{
return super.toString() + "\nLength: " + length;
}
您不能从超级class 访问子class 的方法。只有反过来才有可能。因此,您可以在 Tool class 中访问 Hardware 的 toString() ,在 ScrewDriver class.
中访问 Tool 的 toString()
为了在ScrewDriver的toString()方法中打印出ScrewDriver的所有superclasses的toString()信息,需要修改这个继承链中的所有toString()方法。
假设Hardware的toString()是这样的:
@Override
public String toString()
{
return "Name: " + name + " Message: " + message + " Points: " + points;
}
您需要将 Tool 的 toString() 修改为以下内容,以便它使用其 superclass 的 toString() 方法:
@Override
public String toString()
{
return super.toString() + " Type: " + type + " Message: " + isDangerous + " Percent Dangerous: " + percentDangerous;
}
最后,ScrewDriver 的 toString() 应该调用其 superclass 的 toString() 方法,如下所示:
@Override
public String toString()
{
return super.toString() + " Length: " + length;
}
只有ScrewDriver的toString()才会打印出它所有superclasses的信息。
正在进行 Java 研究多态性的项目。我正在尝试学习如何从底部 child 向上传递一个 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;
}
}
我遇到的问题是,从数组中打印的唯一内容是长度。
非常感谢任何帮助!提前谢谢你。
super.toString();
方法调用返回字符串,但您没有使用此调用的结果,所以基本上您在上面浪费了 CPU 个周期。
可能的解决方案如下:
@Override
public String toString()
{
return super.toString() + "\nLength: " + length;
}
您不能从超级class 访问子class 的方法。只有反过来才有可能。因此,您可以在 Tool class 中访问 Hardware 的 toString() ,在 ScrewDriver class.
中访问 Tool 的 toString()为了在ScrewDriver的toString()方法中打印出ScrewDriver的所有superclasses的toString()信息,需要修改这个继承链中的所有toString()方法。
假设Hardware的toString()是这样的:
@Override
public String toString()
{
return "Name: " + name + " Message: " + message + " Points: " + points;
}
您需要将 Tool 的 toString() 修改为以下内容,以便它使用其 superclass 的 toString() 方法:
@Override
public String toString()
{
return super.toString() + " Type: " + type + " Message: " + isDangerous + " Percent Dangerous: " + percentDangerous;
}
最后,ScrewDriver 的 toString() 应该调用其 superclass 的 toString() 方法,如下所示:
@Override
public String toString()
{
return super.toString() + " Length: " + length;
}
只有ScrewDriver的toString()才会打印出它所有superclasses的信息。