共有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时才在下一行设置。
a.set(c);
由于尽管'c'被声明为Upper类型,但实际上它是'Middle'类型的变量,因为它在测试器中被设置为'Middle'变量'b'的值。因此,将使用的“设置”方法应该是“中间”类中的方法。按照这种逻辑,我认为“ a”的值将设置为“ 5”,但似乎仍为“ 1”。但我似乎不知道为什么。
任何帮助将不胜感激!
答案 0 :(得分:1)
您的Lower班级没有方法set(Upper n)
,只有方法set(Lower n)
。因此,当您进行呼叫a.set(c);
时,它被迫使用其父级的set(Upper n)
方法(在本例中为Middle类),该方法确实具有set(Upper n)
。依次将“ j”设置为“中”,但跳过“ i”。