初学者问题求教,请各位大神指教

buyuan2012 2012-11-16 04:26:21
刚开始学JAVA,遇到一个关于继承的概念问题,代码如下
class J_Base {
public void mb_method()
{
System.out.println("BASE");
}
}
public class TEST extends J_Base
{

public void mb_method()
{
System.out.println("Test");

}
public static void main(String args[])
{
Object a=new TEST();
((J_Base)a).mb_method();
}

}

运行结果是“TEST”;
但是我觉得a强制转换成了父类,应该调用父类的成员方法,应该是“Base”才对,怎么变成这个了?
求指教,是不是我的继承概念理解不对。

另外,我现在学的是《JAVA程序设计教程》雍俊海的书,请问这本书怎么样?
...全文
162 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
北鱼扶摇 2012-11-16
  • 打赏
  • 举报
回复
父类的引用可以引用子类的对象,但是调用同名方法是,调用的是子类中的方法.这是java中Override多态
俊俏山峰 2012-11-16
  • 打赏
  • 举报
回复
虽然你强制转换了,但是执行时候它的对象仍然会调用子类的方法,叫动态绑定吧。。你可以看看马士兵的视频。。
zhaoming262350 2012-11-16
  • 打赏
  • 举报
回复
父类的引用指向子类的对象, J_Base a=new TEST15(); 父类的引用a ,指向子类的对象new TEST15();所以调用TEST15的方法mb_method(),输出Test
zhaoming262350 2012-11-16
  • 打赏
  • 举报
回复
这样改就行了, class J_Base { public void mb_method() { System.out.println("BASE"); } } public class TEST15 extends J_Base { public void mb_method() { System.out.println("Test"); } public static void main(String args[]) { J_Base a=new TEST15(); a.mb_method(); } } 这已经超越继承了,是多态,父类的引用指向子类的引用,引用指向那个子类,就调用那个子类的方法:
feng00~ 2012-11-16
  • 打赏
  • 举报
回复
因为你父类和子类的两个方法一样,子类把父类的重写了,你把其中任意一个方法的名字改一下就会掉用父类的方法
luofengyeer 2012-11-16
  • 打赏
  • 举报
回复
你重写了掉了父类的方法,当然只有子类的
buyuan2012 2012-11-16
  • 打赏
  • 举报
回复

还是上图,这个看的清楚一些,谢了!

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧