如何在 Java 中使用 super.toString() 将 toString 从子级传递到父级

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)

我遇到的问题是从数组中打印的唯一内容是长度。

任何帮助将非常感激!先感谢您。

cur*_*ces 5

您无法从超类访问子类的方法。只有反过来才是可能的。因此,您可以在 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() 才会打印其所有超类的信息。