(1)(J_Base)a:意思是,你把Object类型的强制转化成了J_Base后变成了如下:
J_Base a=new TEST();这是多态的体现了,要想明白为什么运行结果是Test,你需要了解多态的特点了,我知道论坛里面
已经回答过好多次关于多态的特点了,这次在回答一次,希望给你有所帮助:
J_Base a=new TEST();我们假设“=”左边的(引用对象所属的类)叫做“左边”,“=”右边(参与对象所属的类)叫做“右边”多态的特点如下:
(1)在多态中成员函数(非静态)的特点
在编译时期参阅“左边”,就是看引用变量所属的类中是否有调用的方法,如果有,编译通过,如果没有编译失败
在运行时期:参与对象所属的类中是否有调用方法
总结一下:编译看左边,运行看右边
(2)在多态中成员变量的特点
无论编译和运行,都参考左边(引用变量所属的类)
(3)在多态中,静态成员函数的特点
无论编译和运行,都参考左边(引用变量所属的类)
所以你调用的方法是成员方法
Object a=new TEST()
((J_Base)a).mb_method()==>J_Base a=new TEST(); a.mb_method();通过以上的特点就知道是执行子类的中方法
运行结果为Test |