簡體   English   中英

多態性 java 8

[英]Polymorphism java 8

我知道這里是如何運作的

多態不包括實例字段。 方法是,字段不是。 Baap b 是訪問字段 (bh) 時 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());
  }
}

在此處輸入圖片說明

我不明白的是輸出的順序

因為這里 o/p 必須是 4(調用 bh),然后是 Beta 44(調用方法 b.geth())並且該方法也返回 44,所以第一行必須是 4 Beta 44 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 方法的第一個打印語句中,您希望它打印b.h+ " "+ b.getH() 在知道b.getH();返回的值之前,它無法打印此內容b.getH();

因此,它運行b.getH()打印(單獨) System.out.println("Beta "+h); 在將值返回給 main 方法之前。 (打印第 1 行)

這解釋了你的第一行。 返回值后,main 方法現在可以打印第 2 行,因為它現在知道b.getH()結果是什么:

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

這解釋了輸出中的第二行。 運行打印第 3 行時執行相同的命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM