gpt4 book ai didi

java - 无法理解一组 Java 对象的输出

转载 作者:行者123 更新时间:2023-12-02 09:59:02 24 4
gpt4 key购买 nike

有 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());
}
}

我对测试器类中 6 个打印语句给出的输出感到非常困惑。给出的输出是 1, 1, 5, 1, 1, 1,但我认为它应该是 1, 1, 5, 5, 5, 5。很明显,我的问题在于理解为什么变量“a”在下一行中没有设置为 5,而它后面的所有行似乎都是这样做的。

a.set(c);

虽然“c”被声明为 Upper 类型,但它实际上是“Middle”类型的变量,因为它被设置为测试器中“Middle”变量“b”的值。因此,将使用的“set”方法应该是“Middle”类中的方法。按照这个逻辑,我认为“a”的值会被设置为“5”,但看起来它仍然是“1”。但我似乎不明白为什么。

任何帮助将不胜感激!

最佳答案

你的Lower类没有方法set(Upper n),它只有一个方法set(Lower n)。因此,当您调用 a.set(c); 时,它被迫使用其父级(在本例中为类的 set(Upper n) 方法) Middle) 确实有一个 set(Upper n)。这依次设置了 Middle 的 j,但跳过 Lower 的 i。

关于java - 无法理解一组 Java 对象的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55769500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com