多态性java 8

多态性java 8,java,Java,我知道这是怎么回事 多态性不包括实例字段。方法是,字段号。访问字段(b.h)时,Baap b是Baap类型的引用。当访问方法时,b变形为Beta类型(b.getH()) 我不明白的是输出的顺序 在这里,o/p必须是4(调用b.h),后跟Beta 44(调用方法b.geth()),并且该方法也返回44,因此第一行必须是4 Beta 44 public int h = 44; public int getH() { System.out.println("Beta "+h);

我知道这是怎么回事

多态性不包括实例字段。方法是,字段号。访问字段(b.h)时,Baap b是Baap类型的引用。当访问方法时,b变形为Beta类型(b.getH())

我不明白的是输出的顺序

在这里,o/p必须是4(调用b.h),后跟Beta 44(调用方法b.geth()),并且该方法也返回44,因此第一行必须是4 Beta 44

public int h = 44;
  public int getH()
  {
    System.out.println("Beta "+h);         // print line 1
    return h;
  }
  public static void main(String[] args)
  {
    Baap b = new Beta();
    System.out.println(b.h+" "+b.getH());  // print line 2
    Beta bb = (Beta) b;
    System.out.println(bb.h+" "+bb.getH()); // print line 3
  }
在main方法中的第一个print语句中,您希望它打印
b.h+“”+b.getH()
。在它知道
b.getH()返回的值之前,它无法打印该值

因此,它运行
b.getH()
,分别打印
System.out.println(“Beta”+h)
在将值返回到main方法之前。(打印行1)

这就解释了你的第一句话。 返回值后,main方法现在可以打印打印第2行,因为它现在知道
b.getH()
的结果:

System.out.println(b.h+" "+b.getH());
这解释了输出中的第二行。
运行print line 3时执行相同的顺序。

否。getH()方法中的print语句在获得main方法中的getH()结果之前执行,因此在可以打印之前执行。哦,我明白了!但是return呢?它在4之前打印44?同样:不,正如我在前面的评论中解释的,Beta+h的打印在调用该方法的打印之前完成,因为它不能在收到该方法的返回值之前打印它。它肯定不会在同一行中打印,因为它们是两个独立的println语句我明白了..thx@stultuske
System.out.println(b.h+" "+b.getH());