Java 调用哪些被重写的方法?

Java 调用哪些被重写的方法?,java,inheritance,subclass,subtyping,Java,Inheritance,Subclass,Subtyping,我很难理解给定问题的答案。我无法理解在每一步调用类的哪些方法 我试图列出a、b、c声明的类型和实际类型,然后尝试选择重写或重载方法,但这很复杂 class Upper { private int i; private String name; public Upper(int i) { name = "Upper"; this.i = i; } public void set(Upper n) {

我很难理解给定问题的答案。我无法理解在每一步调用类的哪些方法

我试图列出a、b、c声明的类型和实际类型,然后尝试选择重写或重载方法,但这很复杂

class Upper {

    private int i;

    private String name;

    public Upper(int i) {
        name = "Upper";

        this.i = i;
    }

    public void set(Upper n) {
        i = n.show();
    }

    public int show() {
        return i;
    }

}

class Middle extends Upper {
    private int j;

    private String name;

    public Middle(int i) {

        super(i + 1);

        name = "Middle";
        this.j = i;
    }

    public void set(Upper n) {
        j = n.show();
    }

    public int show() {
        return j;
    }

}

class Lower extends Middle {


    private int i;

    private String name;

    public Lower(int i) {

        super(i + 1);
        name = "Lower";
        this.i = i;
    }

    public void set(Lower n) {
        i = n.show();
    }

    public int show() {
        return i;
    }

}

class Tester {

    public static void main(String[] args) {
    Lower a = new Lower(1);

    Middle b = a;

    Upper c = new Middle(5);



    a.set(c);

    b.set(a);

    c.set(b);

    System.out.println(a.show());
    System.out.println(b.show());
    System.out.println(c.show());

    }

}
System.out.println(a.show())的打印结果是什么;在设置命令之后?答案是1

System.out.println(b.show())的打印结果是什么;在设置命令之后?答案是1

System.out.println(c.show())的打印结果是什么;在设置命令之后?答案是1

我不明白为什么所有这些答案都是1。此外,我也无法判断“a.set(c);b.set(a);c.set(b);”使用的是哪个类的重写或重载方法。详细的解释会非常有用。

A.set(c)使用中间的set方法,因为它覆盖了上面的set方法,而下面的(重载)set不适用,因为c不是Lower的实例

Therfore j被设置为c.show(),它返回c的属性j,因此它将被设置为5。因此,在显示和打印时,a的(较低的)属性i从未接触过,并保持为1


尝试自己解决其他问题。

这可能是研究如何调试代码的好时机。代码没有问题。它是关于以下问题的。调试工具允许您逐个语句地跟踪代码语句。因此,您将能够看到调用了哪些方法。@Egeio确切地说,您会问为什么答案总是
1
?通过调试,您可以逐步完成代码,并即时观察传递的值,这些值存储在字段中。。。等等。谢谢你的推荐,它帮了很多忙。我现在正在调试它。