[英]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.