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