为什么我的程序在变量之前打印方法?

Sul*_*972 3 java

当我运行这个程序时:

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

Era*_*ran 6

println调用之前,它的参数 - b.h + " " + b.getH()- 被评估.在此期间,Beta 44由于打电话打印,评估打印getH().只有在评估之后,println才会传递evaluate(4 44)的结果并将其打印出来.