java - 无法理解一组 Java 对象的输出
问题描述
有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);
,当您拨打. 这依次设置了中间的 j,但跳过了较低的 i。set(Upper n)
set(Upper n)
推荐阅读
- javascript - 删除socket.io中的消息?
- python-3.x - 无法在 VSC 终端中运行 Python 文件
- intellij-idea - 使用 SBT 任务自动停止服务器在 IntelliJ IDEA 中运行 PLay Framework 2.x
- python - 尝试读取文件时出现“OSError:[Errno 5] 输入/输出错误”
- abaqus - 如何定义ABAQUS输入文件中的节点和元素?
- c# - Xamarin 表单 - 删除汉堡菜单图标但保留导航栏
- c# - 通向通用约束的更短路径
- java - HttpURLConnection 总是在 Java 中抛出 IOException
- c++ - 如何在 Go 代码中捕获 C/C++ lib 异常
- mongodb - 从 mongo db 中删除 10K 记录