日期:2014-05-20  浏览次数:20687 次

再来一道题目!蛮简单的.
10.   定义A,B如下:  
class   A   {  
int   a=1;  
double   d=2.0;  
void   show(   )   {  
System.out.println( "Class   A:a= "+a   + "   d= "+d);  
}  
}  
class   B   extends   A   {  
float   a=3.0f;  
String   d= "Java   program. ";  
void   show(   )   {  
super.show(   );  
System.out.println( "Class   B:a= "+a   + "   d= "+d);  
}  
}  
若在应用程序的main方法中定义类B的对象b:  
A   b=new   B();       //这句话是什么意思????
b.show();  
则输出的结果如何?

------解决方案--------------------

A b=new B();
这是子类的向上转型,A类 的引用 b,调用B类的构造函数生成B类对象。
子类向上转型后,其通过继承并覆写后的函数仍能被唤起,并能被准确识别及执行,即向上转型后的对象,其内有效的函数别调用时,能准确执行其自身未转型时的功能。
这个机制主要由java函数(非final函数)的“后期邦定”性质保障。