我对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());
}
}
输出:
答案 0 :(得分:2)
该行
System.out.println(b.h+" "+b.getH());
这样做:
b.getH()
并等待其结果b.h
创建一个字符串,一个空格,以及#1 由于Beta.getH
在返回值之前输出"Beta " + h
,因此在上面的步骤1中会发生这种情况。因此,您在步骤1中打印"Beta 44"
,在步骤3中打印"4 44"
。
下一行System.out.println(bb.h+" "+bb.getH());
会发生同样的事情。
您可能也想知道(但没有问)为什么您在某些地方看到4
h
,在其他地方看到44
h
。 This question's answers解释一下。
答案 1 :(得分:1)
简单的解释 考虑3个函数a,b和c,调用是这样的。
a(b(c("hello")));
a等待b返回,b等待c返回,c使用参数,在返回之前执行所有操作,返回b使用的值,它执行相同的操作并且其返回由
使用