当我运行这个程序时:
class Baap {
public int h = 4;
public int getH() {
System.out.println("Baap " + h);
return h;
}
}
public class Beta extends Baap {
public int h = 44;
public int getH() {
System.out.println("Beta " + h);
return h;
}
public static void main(String[] args) {
Baap b = new Beta();
System.out.println(b.h + " " + b.getH());
Beta bb = (Beta) b;
System.out.println(bb.h + " " + bb.getH());
}
}
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
Beta 44
4 44
Beta 44
44 44
Run Code Online (Sandbox Code Playgroud)
如果你仔细看第一个System.out.println(b.h + " " + b.getH());,那么这个命令是否告诉Java在getH()方法的值之前打印出h的值?不应该打印输出的第一部分4而不是Beta 44?
在println调用之前,它的参数 - b.h + " " + b.getH()- 被评估.在此期间,Beta 44由于打电话打印,评估打印getH().只有在评估之后,println才会传递evaluate(4 44)的结果并将其打印出来.
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |