OCAJP练习测试

时间:2016-01-05 12:45:17

标签: java

请看这段代码:

public 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());
        Baap bb = (Beta) b;
        System.out.println(bb.h + "," + bb.geth());
    }
}

此代码的输出是

Beta44 
4,44 
Beta44 
4,44 

我不明白输出的顺序

2 个答案:

答案 0 :(得分:2)

System.out.println(b.h + "," + b.geth());

在此打印结果时,需要评估b.geth()是什么。因此,首先打印Beta44首先打印4,44

类似的事情正在发生声明:System.out.println(bb.h + "," + bb.geth());

答案 1 :(得分:0)

它首先在println()语句中计算表达式,因为Beta44首先打印出来。然后它从println语句开始从左到右打印值,然后打印4,44。它打印4因为实例变量是Baap类型。因此,它选择Baap类中定义的变量值。

希望它会有所帮助。