多态性java 8

问题描述 投票:-6回答:1

我知道它在这里是如何运作的

多态性不包括实例字段。方法是,字段号。 Baap b是访问字段(b.h)时Baap类型的引用。访问方法时,b变为Beta类型(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 betaInBaap = new Beta();
    System.out.println(betaInBaap.h+" "+betaInBaap.getH());
    Beta castedBeta = (Beta) betaInBaap;
    System.out.println(castedBeta.h+" "+castedBeta.getH());
  }
}

enter image description here

我不明白的是输出的顺序

因为这里o / p必须是4(调用b.h),然后是Beta 44(调用方法b.geth()),方法返回44,所以第一行必须是4 Beta 44 44

java
1个回答
0
投票
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(),它在将值返回到main方法之前打印(单独)System.out.println("Beta "+h);。 (打印第1行)

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

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

这解释了输出中的第二行。运行打印行3时执行相同的顺序。

© www.soinside.com 2019 - 2024. All rights reserved.