为什么这个java代码按顺序打印行?

时间:2017-02-28 11:24:54

标签: java

我对java很新,并且一直在做一些OCA问题的练习,并遇到了一个使用这段代码的问题。问题是代码的输出是什么,主要是为了测试对继承的理解。但是,我很困惑为什么线条按此顺序打印?有人可以打破这个并解释为什么" Beta 44"作为 System.out.println的输出的第一行打印(b.h +"" + b.getH()); ?为什么线条按顺序打印?

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

输出:

  1. Beta 44
  2. 4 44
  3. Beta 44
  4. 44 44

2 个答案:

答案 0 :(得分:2)

该行

System.out.println(b.h+" "+b.getH());

这样做:

  1. 致电b.getH()并等待其结果
  2. b.h创建一个字符串,一个空格,以及#1
  3. 的结果
  4. 输出该字符串
  5. 由于Beta.getH在返回值之前输出"Beta " + h,因此在上面的步骤1中会发生这种情况。因此,您在步骤1中打印"Beta 44",在步骤3中打印"4 44"

    下一行System.out.println(bb.h+" "+bb.getH());会发生同样的事情。

    您可能也想知道(但没有问)为什么您在某些地方看到4 h,在其他地方看到44 hThis question's answers解释一下。

答案 1 :(得分:1)

简单的解释 考虑3个函数a,b和c,调用是这样的。

a(b(c("hello")));

a等待b返回,b等待c返回,c使用参数,在返回之前执行所有操作,返回b使用的值,它执行相同的操作并且其返回由

使用