我很难理解给定问题的解决方案。我无法理解在每个步骤中调用了哪个类的方法。
我试图列出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);”用途。详细的说明将非常有帮助。
答案 0 :(得分:1)
a.set(c)使用Middle中的set方法,因为它覆盖了Upper中的set方法,不适用于Lower中的(重载)设置,因为c并不是Lower的实例。
因此,将j设置为c.show(),它返回c的属性j,因此将其设置为5。因此,从不显示a的(lower-)属性i并在显示和打印时将其保持为1。
尝试自己解决其他人。