难以理解一组Java对象的输出

难以理解一组Java对象的输出,java,inheritance,subtyping,Java,Inheritance,Subtyping,共有4类: 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(){

共有4类:

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 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 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 Tester {
    public static void main(String[] args){
        Lower a = new Lower(1);
        Middle b = a;
        Upper c = new Middle(5);
        System.out.println(a.show());
        System.out.println(b.show());
        System.out.println(c.show());
        a.set(c);
        b.set(a);
        c.set(b);
        System.out.println(a.show());
        System.out.println(b.show());
        System.out.println(c.show());
    }
}
我对tester类中6条print语句的输出感到非常困惑。给出的输出是1,1,5,1,1,1,但我认为应该是1,1,5,5,5,5。很明显,我的问题在于理解为什么变量“a”在下一行没有设置为5,而后面的所有行似乎都设置为5

a.set(c);
尽管'c'被声明为Upper类型,但它实际上是'Middle'类型的变量,因为它在测试仪中被设置为'Middle'变量'b'的值。因此,将要使用的“set”方法应该是“中产阶级”的方法。根据这个逻辑,我认为‘a’的值将被设置为‘5’,但它似乎仍然是‘1’。但我似乎不明白为什么


任何帮助都将不胜感激

您的下一个类没有方法
集(上n)
,它只有方法
集(下n)
。所以当你打电话时
a.set(c)
,它必须使用其父级(在本例中为类中间)的
集合(上n)
方法,该父级确实有一个
集合(上n)
。这依次设置中间的j,但跳过较低的i