我知道它在这里是如何运作的
多态性不包括实例字段。方法是,字段号。 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());
}
}
我不明白的是输出的顺序
因为这里o / p必须是4(调用b.h),然后是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方法的第一个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时执行相同的顺序。