日期:2014-05-20 浏览次数:20770 次
J_Base a = new J_Test15(); a.mb_method();
------解决方案--------------------
程序没有问题
结果就应该是:“Test”
class J_Test15 继承class J_Base ,并且重写了mb_method方法,使之打印“Test”。
如果Object a=new J_Test15(); a.mb_method(); 打印出“Test”相信楼主不会吃惊。
关键的是在调用这个方法之前,对object a进行了强制类型转换,所以楼主就疑惑啦。
先说强制类型转换:因为class J_Test15 继承class J_Base ,所以只要是属于class J_Test15 必然就属于class J_Base 。
举例来说,class 【人】 继承了class 【动物】,那么所有人都属于动物类。
看准实质:虽然进行了一次封装(Object a=new J_Test15(); ),而后又在一定程度上做了拆箱(((J_Base)a)),但是它依然是class J_Test15 的实例,class J_Test15 的对方法mb_method进行重写,优先级高于super class的同名方法,以此仍然是打印出“Test”。
------解决方案--------------------
我也不懂
J_Base app=new J_Test(); //app指向的是子类的对象,那么调用的方法是子类继承下来的父类方法,那么为什么调用的成员变量却是父类的呢
------解决方案--------------------
类型强制转换 父类 -〉 子类