繁体   English   中英

哪些覆盖方法被调用?

[英]Which overridden methods are invoked?

我很难理解给定问题的解决方案。 我无法理解在每个步骤中调用了哪个类的方法。

我试图列出什么是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)使用来自Middle的set-method,因为它覆盖了Upper中的set-method,并且来自Lower的(重载)设置不适用,因为c不是Lower的实例。

因此,将j设置为c.show(),它返回c的属性j,因此将其设置为5。因此,永远不会触摸a的(下)属性i,并且在显示和打印时将其保持为1。

尝试自己解决其他人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM